'Firewall'에 해당되는 글 1건

  1. 2008.10.27 :: ActiveX기반의 방화벽 프로그램
3-2학기 2008. 10. 27. 03:22
학과에서 텀과제가 난이도가 높기로 꽤 정평이 나신 탁성우 교수님의 과제로 나온

ActiveX기반으로 작동하는 방화벽 시스템 이다.

우선 이 시스템은 커널 레벨의 Hook Driver(by DDK)를 이용하여 작동한다.
tcp/ip 프로토콜 계층으로 신호를 넘기기 전에, 훅된 드라이버로 먼저 패킷을 넘겨받아 처리한후
tcp/ip 프로토콜 계층으로 데이터를 넘기기에 가능해지는 원리이다.
이를 구현하기위해서는 DDK(Driver Development Kit)이라는 라이브러리가 필요하다.
드라이버는 network 계층과 transport계층 사이에 위치하게 되고, 이정보를 어플리케이션이
컨트롤 하게되면 방화벽이 작동하게 되는 원리이다.

최종 보고가 프로젝트 시작으로부터 4주 뒤였기에, 4주간 개발을 진행하였다.
실질적인 기능 작동은 2주 정도 후부터 작동하기 시작했다.

드라이버의 개발은 내가 맡았고, ActiveX를 이용한 어플리케이션 작성 및 연동은
한승혜 양이 맡았다.
어플리케이션과 드라이버를 연결하는 커넥팅 부분은 내가 직접 구현을 하였다.

커널레벨의 드라이버를 구현함에 있어 속도저하없이 Rule을 삽입하기위해, 링크드 리스트를 직접
구현하였는데 그 방식을 단순화시켜 속도를 극대화하였다.
삽입시에는 제일 앞에 삽입하여 삽입하는데 소요되는 시간은 O(1)이 되게 하였다.
이렇게 한 이유는 커널레벨의 malloc시에 시간이 소모되므로, 네트웤 속도에 최대한 영향을 안미치기위해 고안한 방법이다.

커널레벨에서 작동하는 Hook Driver는 매우 민감하여 메모리참조 오류가 발생할경우 블루스크린을 띄우고 윈도우가 작렬히 사망한다. 이러한 문제로 윈도우즈 파일시스템이 망가져 고생하는 다른 팀원들도 많았다. 이 점이 방화벽을 만드는데 있어 가장 힘들게 하는 점이기도 하다.
개인적으로는 Vmware에 XP를 설치하고 작업하는것을 추천한다.

구현된 기능으로는 간단할 정도의 방화벽 시스템으로써

1.IP/PORT방어,
2.전송량제어
3.단어제어
4..패킷모니터링(그래프 출력)
5.세션제어
6.실시간 프로세스를 인식하여 taskmgr처러 보여주는 기능
위와 같은 기능들이다.

약간의 문제가 있는 부분은 패킷모니터링 부분인데 약간의 꼼수로 구현을 해놓았다.
일정 타이밍주기로 전송량을 읽어와서 화면에 출력하게 했는데 이는 정석이 아니다.
정석으로 구현한 사람은 주변에 최모군이 구현을 했는데 그 방식은 다음과 같다.
업로드나 다운로드시에 드라이버 레벨에서 인터럽트를 발생시키고, 어플리케이션은 그 인터럽트를 캐치하면 드라이버에 전송양을 요구하여 전송양을 읽어오는것이다. 이렇게 하면  굉장히 아름다운(?) 어플을 짤수 있을것이다. 나도 시도는 해보았지만 MSDN에서 그러한 정보를 찾아내는것을 실패하여 끝내 구현하지 못한부분이다.


교수님이 처음에 올려주신 샘플코드에 중요한 결함이 있어 커널레벨의 드라이버가 불안정하여 프로그램이 작동하다가 블루스크린을 출력하여 죽어버리는 경우가 있었는데 아직도 원인은 모르겠다. 하지만 아예 구조를 분석하고 드라이버 틀 생성기(Quick SYS)를 이용하여 틀을 생성한후, 나머지 모든 부분을 직접 설계하고 작성한 이 방화벽 시스템은 안정성을 보장하였으나, 교수님이 올려주신 소스를 그대로 이용하여 시작한 조들은 모두다 시연도중 오작동하는 결과를 보였다.

몇몇 팀들은 한해전 선배들의 코드를 그대로 받아와 제출한 조도 있었다고한다.
이는 자신의 경험을 져버리는 행위라고 생각한다. ....물론 나는 아니다.....

이 방화벽 시스템을 ActiveX로 구현할 사람이 누가될지는 모르겠다.
부산대학교 정보컴퓨터 공학부 후배들이 될수도 있고, 타학교의 컴공생일지 모르겠지만
한번쯤 해볼만한 경험이라 생각한다.

같은학기, 다른 분반의 다른팀은 4명이서 방화벽시스템을 구현하려고 시도하려다, 끝내 실패하고 패킷캡쳐 라이브러리를 이용하여 유사한 시스템을 구현한것을 본적이 있다.  이는 거의 구현하는부분은 없다고 봐도 무방하다.  팀원이 훨씬많은데도 말이다.

이는 개인 능력의 차이도 있을거라 생각하지만, 준비성의 부족이라고 생각한다.
MSDN을 통한 정보검색, 웹서핑을 통한 커널레벨의 특성 등을 제대로 파악하고, TCP/IP에 대해서 약간의 공부를 한다음 시작한다면 무리없이 2주안에 기본적인 방화벽은 작성할수 있을거라
생각한다.

사용자 삽입 이미지

사용자 삽입 이미지
                                                        <문제의 화면>


ActiveX로 배포하기위한 패키징 툴을 올린다.
내가 쓰던 패키징 배포파일이 포함되어 있다. step1,step2.bat파일을 잘 보고 조절하며
firewall.inf 파일을 잘 수정하길 바란다. 이거 찾느라고 예전에 고생을 좀 했었는데
필요하신분은 가져다 쓰길바란다.




추가로 혹시나 방화벽으로 검색해서 들어오신분이 계실것 같아 내용추가합니다.

Visual Studio 6.0에서 작동하는 DDK(링크)
http://download.microsoft.com/download/9/0/f/90f019ac-8243-48d3-91cf-81fc4093ecfd/1830_usa_ddk.iso

현재 위의 링크는 홈페이지상에서는 안보이지만 저링크로 다운받을수 있다.
아마 저 버젼이 6.0에서 억지로라도 컴파일이 가능한 마지막버젼인듯하다.

약간의 디파인값들을 수정하여 주면 6.0에서도 잘 컴파일된다.
비쥬얼스튜디오2005이상에서는 그냥 컴파일되므로 편할대로 하면된다.
아래의 링크를 참조하면 해결가능하다..(본인이 사용했던방법)
http://blog.naver.com/fruach?Redirect=Log&logNo=150018484930



또한 커널 레벨에서 디버그 메시지를 출력할수있는데 이는 드라이버 디버깅시에
매우 유용하다.  다운로드 링크는 아래와같다
http://technet.microsoft.com/en-us/sysinternals/bb896647.aspx
자세한 사용법은 웹서핑해보길바란다.


VM안의 WInXP에서 개발하는것이 안전할걸로 예상된다.
하지만 나는 그냥 xp환경상에서 시도했으며 별문제는 없었다.
타조원은 윈도우즈를 여러번 재설치했다...이는 액티브엑스가 등록되어
삭제할줄몰라 그랬던것이다.. 간혹 커널이 깨진경우도있으나 대부분 등록문제이다.
이는 레지스트리를 통해 해결이 가능하다. 궁금하면 연락을 주면 알려주겠음.


DDK사용을 위한 VC6.0 환경세팅
1. vs6.0 설치
2. 서비스팩6설치 <----매우 중요
3. (3790.1830) WIN SERVER 2003 SP1 다운로드
4. SDK설치
5. INC폴더(WXP, DDK\WXP, CRT 를 세팅)
6. LIB폴더 세팅
7. 링킹옵션 폴더세팅
8. BASEDIR환경변수 경로 세팅
9. CLT+F7누른후 디버그 모드일때 커스텀빌드 칸의 모든정보를 삭제
10. 디버깅모드로 컴파일 & 링크

위의 과정을 거치면 DDK환경 설정은 얼추될거임.

업무적으로 필요해서 저도 기록을 참고하는데 설렁설렁 3일이면 방화벽 기본적인 기능은 다 구현이되더군요.....
혹시나 도전하시는분들은 겁먹지 마시고.....화이팅....ㄲㄲ
posted by Sense.J
: