사실 이런것들이 얼마나 통할지 모르겠다.
현실과 이론은 항상 정확히 일치하지는 않으니
하지만 아래 링크에는 중요한 말들이 많이 포함되어있다.

http://blog.naver.com/dhow88?Redirect=Log&logNo=40018219360 

1. 끊임없이 이동한다. (성을 짓지 말라)
2. 빠른 속도(fast fail을 말하는 것일까)
3. 모든 이익의 공동 분배
4. 정보화


bloger: moltak.net 

'scrap' 카테고리의 다른 글

말라리아를 진단하는 스마트폰 이야기  (0) 2012.03.14
VMWare WinDBG Kernel Debugging 설정  (0) 2010.05.08
방화벽 정책에 관하여  (0) 2010.04.29
방화벽 정책(예)  (0) 2010.04.29
방화벽 정책  (0) 2010.04.29
너무나 멋지다. 이런 것을 나도 만들어 낼 수 있을 까. 모든 인간 사람에게 이득이 되고 희망이 될 수 있는 서비스를 만들어보고 싶다. 금전적인 이익을 떠나 나에게 너에게 우리 모두에게 꿈이 될 수 있는 그런 것들

원문:   http://health20.kr/2429 



스마트폰이 헬스케어 진단기기로서 이용할 수 있다면 얼마나 좋을까? 특히 건강과 관련한 접근성이 떨어지는 아프리카 대륙에서 그래도 보급이 많이 된 스마트폰이 이런 역할을 할 수 있도록 하는 연구가 진행되고 있다.  

아프리카 대륙에서는 29,000명에 이르는 5세 이하의 어린이들이 말라리아에 감염되어 매일 목숨을 잃고 있다. 치사율은 15~20%에 이르며, 전체 사망자의 85%가 5세 이하의 어린이들이다. 문제는 이들의 감염을 예방적 항생제를 이용하면 충분히 예방할 수 있다는 것이다. 이런 상황에서 말라리아를 빨리 진단할 수 있는 기술이 나온다면 많은 도움이 될 것으로 예측되는데, 현재 가장 빨리 간단한 진단이 가능한 방법은 면봉과 시약을 이용해서 진단하는 진단키트를 이용하는 것이다.  감염된 혈액과 접촉이 되면, 말라리아 항체가 면봉의 색상을 변화시키는 원리로 진단을 하게 되는데, 문제는 시약이 매우 불안정하고, 말라리아 감염과 관계없이 색상이 변하는 경우가 많아서 유용성이 매우 떨어진다는 것이다. 약 60% 정도의 검사가 위양성으로 나오고 있어서 치료받지 않아도 되는 어린이들에게 너무 많은 예방적인 항생제 투여가 이루어지고 있다.  또한, 이렇게 치료받지 않아도 되는 아이에게 처방된 약제는 말라리아 치료의 내성을 키우는 부작용까지 있어서 정확한 진단방법의 중요성은 아무리 강조해도 지나치지 않는다.

Lifelens라는 기술은 스마트폰을 이용해서 말라리아를 정확히 진단할 수 있다는 희망을 불러일으키고 있다는 점에서 주목할 만하다.  명확하지 않는 시약을 이용하는 방법에 비해, 스마트폰의 카메라로 바늘로 찌른 혈액 한 방울에서 적혈구의 모양을 직접 관찰할 수 있는데, 적혈구가 깨졌거나 말라리아 원충의 모습을 직접 확인할 수 있고, 일단 얻은 영상을 바탕으로 3차원 모델링을 통해 정교한 진단이 가능하다.  사용방법도 복잡하지 않아서, 스마트폰을 이용할 수 있는 기초적인 지식만 있으면 누구나 Lifelens로 검사를 할 수 있다.  핵심기술은 마이크로소프트의 닷넷 기반의 이미지 분석 소프트웨어에 있는데, 현재 윈도폰 7을 활용하여 진단을 할 수 있다.  현재는 말라리아 진단에 초점이 맞추어져 있지만, 간단히 혈액검사를 할 수 있다는 점에서 앞으로 더욱 다양한 용도로 활용될 수 있을 것이다.

2012년 MWC에서 노키아에서 4100만 화소를 지원하는 현미경급 카메라를 선보여 화제가 되기도 했는데, 스마트폰의 사용용도가 앞으로 어떻게 확대가 될지 기대가 된다.  아래는 이 기술과 관련한 동영상이다.





참고자료:

Life Lens 프로젝트 공식 블로그 



'scrap' 카테고리의 다른 글

유목문화에서 배우는 벤쳐경영  (0) 2012.03.16
VMWare WinDBG Kernel Debugging 설정  (0) 2010.05.08
방화벽 정책에 관하여  (0) 2010.04.29
방화벽 정책(예)  (0) 2010.04.29
방화벽 정책  (0) 2010.04.29

안녕하세요. moltak 입니다.

오늘은 드라이버 개발을 한다면 꼭 알아야 할 VMWare WinDBG 설정 방법을 포스팅 하겠습니다.

 

준비물: VMWare(6.5이상), WinDBG(6.0 이상), 꼭 해내겠다는 마음가짐.

 

세 개의 준비물만 갖추셨다면 완벽합니다.

세팅 순서는 VMWare->WinDBG 순서로 진행하겠습니다.

 

1. VMWare에 WindowsXP를 설치해 주세요. (다들 이미 너무 잘 아시는 내용)

2. 처음 WindowsXP를 VMWare에 설치하시고 가상 머신 세팅에 들어갑니다. (그림 참조)

3. 아래 Add 버튼을 누르셔서 Serial Port를 선택하세요.

4. Output to named pipe를 선택하세요. (그림 참조)

 

 

5. 아래 그림과 같이 세팅합니다. (Named pipe는 굉장히 중요하니 꼭 기억해 두세요.)

6. Yield CPU on poll 체크를 꼭 해주세요.

 

 

7. 아래 그림과 같이 세팅 되었을 겁니다.

 

 

8. 이제 VMWare안에 깔려있는 WindowsXP로 부팅합니다. 시스템 등록 정보-> 고급-> 시작 및 복구로 들어갑니다. 그리고 편집을 클릭합니다.

 

 

9. multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" 뒤에 /fastdetect /debug /debugport=COM1 /baudrate=115200를 추가 합니다.

이상으로 VMWare 세팅은 끝났습니다. 이제 WinDBG 설정을 하겠습니다.

 

 

10. WinDBG의 속성 창을 열어주세요.

빨간색 네모 박스 위치에 대상 뒤에 -b -k com:pipe,port=\\.\pipe\WDK,resets=0 를 붙여 넣어 주세요

 

 

자 이제 WinDBG를 열어 보세요. 근데 아래 그림과 같은 오류가 날 수 있습니다.

 

왜냐하면 VMWare에서 우리가 설정해준 Windows가 구동 중이 아닐 때 위와 같은 오류가 납니다.

이 것을 해결 하려면 Windows가 부팅 중일 때 WinDBG를 실행시키시면 해결할 수 있습니다.

 

 

그림처럼 vmware를 실행하자 마자 windbg 실행!! 그러면 됩니다.ㅋㅋㅋ

자 다들 아셨으니 공부합시다. ㅋㅋ 즐공 즐프요!!

 

 

 

Bloger: moltak.net

'scrap' 카테고리의 다른 글

유목문화에서 배우는 벤쳐경영  (0) 2012.03.16
말라리아를 진단하는 스마트폰 이야기  (0) 2012.03.14
방화벽 정책에 관하여  (0) 2010.04.29
방화벽 정책(예)  (0) 2010.04.29
방화벽 정책  (0) 2010.04.29

(펌: http://cafe.naver.com/dnspro.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=8018)

모든 일이 그렇듯 방화벽도 정책을 어떻게 선언하느냐가 중요합니다.

 

많은 방화벽을 보면서  정책에 대한 확립이 얼마나 중요한지 절실히 느꼈답니다.

 

그래서 오늘은 방화벽정책에 대한 이야기를 해보겠습니다.

어쩌면 이 부분은 대 부분의 방화벽 엔지니어들이 알고 있는 부분입니다.

 

그러나 너무나도 지켜지지 않고 있기에 이렇게 작성을 해보렵니다.

 

방화벽 정책

원칙

방화벽 정책은 "작은rule 큰policy"를 기본 원칙으로 합니다.

이 말은 rule 정책이 선언된 후 나머지 정책이 policy  에 의해 필터링 된다는것을 나타냅니다.

 

그리고 rule이 작아야 방화벽의 병목현상을 완화시킬수 있기때문입니다.

(rule이 길어지만 길어질 수록 많은 패턴이 그 rule 을 읽고 filter 되야 하기때문에)

- 이것은 모든 방화벽의 기본 filter 방법이고 원칙입니다.

 

위의 원칙으로 방화벽 정책은 두 가지로 나뉘게 됩니다.

(선 부분이 rule 후 부분이 plicy 라고 판단하시면 이해가 되실 것입니다.)

 

1. 선 DROP 후 ACCEPT

- 방화벽 rule 정책이 DROP 으로 선언되고 나머지 패턴에 대해선 모두  ACCEPT 하는 정책입니다.

이 정책은 DROP할 rule이 작을때 사용하는 정책입니다.

나머지에 대한 부분은 ACCEPT되기 때문에신중하게 사용해야하는 정책입니다.

(실제로 이 정책은 기본적으로 허용되어 있는 상태에서 필요에 따라 rule를 추가하여 막는 방법과 같습니다.

그렇다 보니 기본적인 허용부분이 편리로 이해될 수도 있지만 자칫 공격의 open으로 적용될 수도 있습니다.)

 

요즘 같이 많은 패턴의 공격이 있을 경우에는 적합하지 않는 정책이라 할 수 있습니다.

2. 선 ACCEPT 후 DROP

- 방화벽 rule 정책이 ACCEPT 로 선언되고 나머지 패턴에 대해선 모두 DROP 하는 정책입니다.

이 정책은 ACCEPT할 rule이 작고 대 부분을 DROP 할 때 사용됩니다.

실제 요즘 방화벽은 이 방화벽정책을 거의 이용합니다.( 이용해야하는데 안되는것들이 많아서 이렇게 글을 쓰고 있는거지요.)

 

이 장점은 기본적인 DROP으로 안전으로 다가갈 수가 있습니다.  하지만 그것이 단점이 될 수도 있습니다.

단점으론 rule의 초기화 같은 기술적 문제가 발생했을 경우 모든것이 DROP 될 수있다는 것입니다.

 

 

위의 방화벽정책은 rule의 견고성  이 받여줘야합니다.

 

그럼 rule의 견고성이라는 것은 어떻게 해서 생길 까요.

 

1. rule에 원칙을 입히자

- 가끔 방화벽 rule을 들여다 보면 누더기가 되어있는 곳들이 있습니다.

   (주위의 요청에 의해 라든지...  아무튼 이해는 가지만 방화벽만큼 정책은 꼭 지켜져야 할 부분입니다.)

  policy가 ACCEPT인 방화벽에서 특히나 많이 발생하는데요.

  회사의 방화벽 rule을 직접 확인 해보세요. 혹시 기본적책이 ACCEPT인데 ACCEPT rule을 올려놓은것은 없나요?

  혹은 DROP인데  방화벽 rule에 DROP이 올라가 있지는 않나요.

 

  이 부분은 rule의 의미가 무용지물이여서가 아니라 rule의 길이가 길어져 네트워크의 지연을  야기합니다.

 

2. rule에 책임추적성을 입히자

- 여러분의 방화벽은 rule  하나 하나에 누구의 요청에 의해서 무슨 이유로 된 rule  인지 문서화 되어있나요?

   이 부분은 제가 본 회사 거의 대부분에 문제였습니다.

  

   제가 강의를 하다 들은  일화입니다.

   그분은 외국의 요청에 의해 PIX 장비셋팅을 하러 갔다고 합니다.

   rule셋팅에 일주일이 걸렸다고 하시면서 하시는 말씀이 그 곳에선 rule을 open해 줄때 요청자, 사유, 중요성

   에 대한 문서를 받는다고 합니다.

   우리가 외국 따라 해야한다는것이 아니라 저게 원칙입니다.

   우리의 방화벽에 올라와 있는 어느 rule에 의해서 문제가 발생시 그에 따른 조치에 대해서 구체적으로 선언되어있나요?

  

 

방화벽이라는 도구가 나온지 벌써 10년이 넘었습니다.

방화벽은 이제 기본이 되었습니다.  여러분의 기본은 얼마나 지켜지고 있나요?

(펌: http://blog.naver.com/helpboys?Redirect=Log&logNo=40036667969)

방화벽을 통해 어떤 서비스들이 어떤 방향으로 허용되는지를 명시하는 서면 문서가 있어야 한다. 디폴트는 열린 것인지 닫힌 것인지도 규정한다, 어떤 서비스가 정책에 명시되어 있지 않다면, 이것이 허용된다는 것을 의미하는가 혹은 그렇지 않다는 것을 의미하는가? 이것은 관리자의 서명을 받아야 하며, 그러지 않으면 "모든 사람들이 다루어졌다고 생각했던" 구멍을 통해 보안이 침해될 경우 방화벽 관리자는 매우 곤란한 입장에 처할 것이다. 다음은 인터넷 방화벽을 위한 정책의 예시이다:

인터넷 방화벽 정책 ()

보안 요구사항:

1. 접근 통제

·         사내 네트웍으로부터의 모든 인터넷 접속은 방화벽에 있는 프락시를 통해서 발생해야만 한다.

·         디폴트 구성: 명시되지 않은 모든 서비스들은 금지된다.

·         모든 사용자들은 인터넷 사용자들과 이메일을 교환할 있다.

·         R&D 부서 사용자들은 WWW, ftp real audio 사용할 있다. 다른 사람들은 인가가 필요하다.

2. 보증

·         방화벽과 프락시 시스템들은 민감한 호스트로서 설치되어야 한다. 불필요한 모든 서비스들은 운영체제에서 중지한다. 사용자들은 시스템들에 직접 로그온 없어야 한다.

·         방화벽 정책과 구성은 정확하게 문서화 되어야 한다.

·         방화벽 시스템들에 대해 정기적인 모니터링과 연례 감사를 실시해야 한다.

·         사용잗르과 방화벽 관리자들은 각자의 책임을 인지하고 있어야 하고 이러한 책임들을 있도록 교육을 받아야 한다.

3. 로깅

·         상세 로그를 보존해야 한다 (가능하다면 별개의 서버에).

·         자동적으로 분석되어야 하고, 치명적인 에러는 알람을 발생시켜야 한다.

·         로그는 적어도 1년간 보관해야 한다.

·         의미 있는 로그 엔트리들은 매일 검사해야 한다.

·         방화벽 사용량에 대한 통계를 얻을 있어야 한다.

4. 가용성

·         방화벽은 높은 가용성을 제공해야 하고 그에 관해 필요한 일들을 수행해야 한다 (백업/복원 )

·         변경 관리와 사고 대응을 위한 프로세스가 있어야 한다.

5. 필요한 기능:
나가는 (outgoing) 서비스:

다음 서비스들은 특정한 내부 호스트로부터 (e.g. 프락시를 통해) 인터넷으로 나가는 것이 필요하다:
1. Email, WWW (HTTP), ftp, telnet, SSH
2. DNS (resolve Internet names)
3. News (NNTP)
4. Real Audio

들어오는 (incoming) 서비스:

다음의 인터넷 서비스들은 특별히 보호되는 서브넷 상에 구성된 프락시 호스트들을 통해 안으로 들어오는 것이 허용되어야 한다:
1. Email:
모든 사용자들은 안전한 게이트웨이를 통해 인터넷 이메일을 받을 있어야 한다
.
2. News (NNTP)
3. Secure Logins (
소수의 규정된 사람들에 대해): SecurID + SSH 통해


다른 인터넷 서비스들을 필요로 하는 시스템들은 모두 특별한 외부 (안전하지 않은) 서브넷에 두어야 한다. 이들은 인터넷에 직접 연결되도록 한다. 호스트들로부터 내부 네트웍으로의 접근에 대해서는 인터넷 호스트의 접근에서와 같은 규칙이 적용된다.
인터넷에 제공되는 서비스들:

다음 서비스들은 인터넷에 제공되어야 한다 (보호되는 영역내의 안전한 서버들에 의해):

1. 방화벽/ 프락시 시스템의 DNS resolution.
2. WWW
서버
.
3. Anonymous ftp
서버
.
4.
특별한 프로젝트/ 다른 회사들과의 협력을 위한 사용자 FTP 서버 .
 

[출처] 방화벽 정책|작성자 제천최고

펌(http://cafe.naver.com/nsis.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=24041)

방화벽 정책 수립 시 프로토콜 가이드 내용 입니다.  

방화벽 관련 업무 하시는 분에게 좋을 듯합니다.  수고하셔요.

service 위험도
 level
설 명
BGP 4 인터넷환경이 보안적으로 여러 위험성에 노출되기 이전에 고안되었기에 데이터를 조작하거나 삭제하는 등 네트웍 라우팅에 좋지 않은 영향을 미칠 가능성이 있는 여러 가지 공격 방법에 대처하는 메커니즘을 가지고 있지 않다. SYN packet을 이용하여 SYN FLOODING을 일으길 경우 bgp port(TCP 179)가 DRDoS의 target이 된다.
DHCP-relay 4 세그먼트간의 지점간에 위치하여 다른 DHCP에서 IP를 받을 수 있도록 포워드하는 기능이다. Address assignment가 유출될 경우 man-in-the-middle 공격 등에 노출된다. ( UDP 67)
DNS 4 잘 알려진 포트이므로 공격자의 주요목표가 된다. 불필요한 사용자에게 DNS Zone Transfer를 허용하지 말아야 한다. 해당 도메인의 Zone에 대한 복사본을 얻기 위해 Primary Name Server로부터 Zone 데이터베이스를 끌어오는 작업을 Zone Transfer라 하는데, 이는 Primary Name Server가 다운될 경우 Secondary Name Server가 그 역할을 대신하게 되기 때문에 양쪽 서버간의 정보를 일관성 있게 유지시키기 위해 수행되는 작업이다. 일반적으로 Zone Transfer는 Second Name Server에서만 Zone Transfer를 할 수 있도록 하면 된다. 허가되지 않는 사용자에게 Zone Transfer를 허용할 경우 DNS 서버의 중요한 정보가 유출되게 된다. 즉, 공격자는 전송 받은 Zone 정보를 이용하여 호스트 정보, 네트워크 구성 형태 등의 많은 정보를 파악할 수 있게 된다. 대부분의 공격도구(주로 취약점 스캐너)는 공격하고자 하는 시스템의 IP 리스트를 얻기 위해 Zone Tranfer를 이용한다. 대부분의 사이트에서 DNS 서버를 디폴트로 설치할 경우 임의의 사용자가 Zone Transfer 를 할 수 있도록 설정된다. DNS 코드 취약점을 이용하여 DNS 서버에게 교묘히 조작된 패킷을 보냄으로써 버퍼 오버플로우를 발생시켜  공격자가 원하는 코드를 실행시키거나 루트 쉘을 얻을 수 있다. (TCP, UDP 53)
FINGER 3 로그온한 사용자, operating system에 대한 정보 제공한다. (TCP 79)
FTP 5 읽고 쓰기가 가능하여 시스템의 손상, 파괴가 가능하다. 버퍼 오버플로우를 일으켜 root권한을 획득하거나 DOS 공격하는 등 취약점이 다수 존재한다.(TCP 20,21)
FTP-GET 5 읽기가 가능하여 시스템의 정보 유출이 가능하다. 버퍼 오버플로우를 일으켜 root권한을 획득하거나 DOS 공격하는 등 취약점이 다수 존재한다.
FTP-PUT 5 쓰기가 가능하여 시스템의 손상, 파괴가 가능하다. 버퍼 오버플로우를 일으켜 root권한을 획득하거나 DOS 공격하는 등 취약점이 다수 존재한다.
GOPHER 5 고퍼는 웹 서비스가 개발되기 이전까지는 인터넷의 가장 쉬운 인터페이스로 사용되었다. 고퍼는 정보의 내용을 주제별 또는 종류별로 구분하여 메뉴로 구성함으로써, 인터넷에 익숙하지 않은 사람도 쉽게 정보를 찾아볼 수 있게 만들었다. 고퍼는 인터넷의 다른 기능들, 즉 원격접속(telnet), 파일전송(ftp), 뉴스(news)등의 기능을 고퍼 메뉴 속에서 실행할 수 있고, 고퍼 서버들끼리 서로 연결되어 있어서 여러 개의 고퍼 서버를 이동하면서 자신이 필요로 하는 정보를 쉽게 찾을 수 있다. 고퍼로 FTP session을 맺을 경우, 서버의 ftp directory로 접속을 제한할지라도 bounce attack(제삼의 서버를 이용하여 공격대상의 네트워크를 스캐닝할 수 있는)에 이용될 수 있다. (TCP 70)
H.323 4 그 자체가 정의된 하나의 규약(protocol)이 아니라 각종 규약들(H.224, H.245 등)을 모아놓은 프로토콜 스택이다. H.323은 음성 및 영상 데이터를 TCP/IP,UDP 등의 패킷 교환 방식의 네트워크를 통해 전송하기 위해 채택된 표준으로, 이러한 패킷 방식의 데이터 전송의 예가 VoIP이다. 양방향으로 설정 필요하며, 다수의 포트 허용으로 보안에 취약하다.
HTTP 4 Web Server의 개방성과 CGI/JAVA/PHP등의 content script의 취약점에서 오는 원격 해킹의 가능성이 존재하며, 이런 코드들의 보안성 점검이 필요하다. 정보유출과 루트 권한의 획득이 가능하다. Web server log의 개인 정보가 적절한 인증없이 조회되지 않도록 해야한다. (TCP 80)
HTTPS 4 SSL을 사용하기 때문에 HTTP 프로토콜보다는 보안상 안전하나, content script의 취약점에서 오는 원격 해킹의 가능성이 존재하며, 이런 코드들의 보안성 점검이 필요하다. 정보유출과 루트 권한의 획득이 가능하다. (TCP 443)
ICMP-INFO 4 remote host 가 ICMP_MASKREQ query 에 응답하여 netmask 등의 정보를 보내준다. 공격자는 네트웍이 어떻게 구성되고 라우팅 되는지에 관한 정보를 얻을 수 있다. 위험도는 높지 않다.
ICMP-TIMESTAMP 4 remote host가 ICMP timestamp request에 응답한다. 이것은 공격자가 그 host의 세팅된 시간정보를 알려줌으로 시간에 기초한 인증 protocols를 통과하도록 돕는다. ICMP timestamp requests와 outgoing ICMP timestamp replies를 필터링해야 하며 위험도는 높지 않다.
IKE 3 IPSec을 하는 장비간에 암호화 알고리즘과 인증방식을 서로 설정한다.
IMAP 3 POP3와 유사한 취약성을 가지고 있다. 로그인하지 않은 상태에서 버퍼 오버플로우를 발생시켜 유저네임이나  패스워드를 변경할 수 있으며, 로그인된 상태에서 여러 버퍼 오버플로우 공격을 할 수 있다. (TCP 143)
INTERNET LOCATER SERVICE 5 LDAP, LDAP over SSL/TSL, user locater service를 포함한다.
IRC 4 일련의 규칙과 약속이 관련되어 있는 채팅 시스템으로, 동시에 여러 사용자의 태화를 제공하는 클라이언트/서버 구조의 소프트웨어이다. 어떤 흔적도 남기지 않은 채(영수증없는 금융거래처럼)  파일전송이 이루어질 수 있다. (TCP 6660-9)
L2TP 5 인터넷 표준인 L2TP (RFC 2661)는 인터넷에서 remote access VPN을 구성하는데 널리 사용되는 클라이언트/서버 기반의 Tunneling Protocol이다. Layer 2의 PPP 트래픽에 대한 Encapsulation을 통해 두 지점간의 터널을 생성, 관리, 소멸시켜주는 것이 기본 기능이며, 보안은 대부분 PPP에서 제공하는 보안기능에 의존하므로 보다 강한 보안을 위해 IPSEC을 사용해야 한다. Layer 2 Tunneling은 크게 tunnel initiator에 따라 Voluntary Tunneling과 Compulsory Tunneling으로 나눌 수 있다. Voluntary Tunneling은 client-initiated Tunneling으로 클라이언트가 직접 Tunnel 서버(보통의 Remote Access Server(RAS), IETF 용어로는  PPTP/L2TP Network Server(PNS/LNS)로 불림)와 Tunnel을 형성하므로 클라이언트간의 End-to-End Tunnel이 형성되며, 클라이언트에 PPTP/L2TP 프로토콜이 탑재되어 있어야 한다. 반면 Compulsory Tunneling은 ISP-initiated Tunneling으로 인터넷 서비스 제공자(ISP) Remote Access Switch가 클라이언트를 대신해서 터널을 열어 주는 경우로 클라이언트에 Tunneling Protocol이 탑재되어 있지 않은 경우나, ISP에서 VPN 서비스를 제공해 주는 경우에 사용되며, PAC/LAC-PNS/LNS간에 Tunnel이 형성된다. L2TP는 Packet-Oriented Point-to-Point 접속을 제공하는 네트웍만 보장되면, 어떤 전송 프로토콜 상에서도 사용 가능하다 (e.g. IP, Frame Relay PVCs, ATM VCs 등). Multiple- Tunnel을 허용하여 QoS에 따라 서로 다른 Tunnel을 이용할 수 있다. L2TP는 헤더 압축 및 Tunnel-End-Point 인증 (패킷단위의 인증이 아니라, Tunnel End-Point들의 Identity에 대한 인증) 기능을 제공한다. 서로 완전한 신뢰관계에 있는 제한된 host 사이에서만 허용한다.
LDAP 4 TCP/IP 상에서 수행하는 디렉토리 서비스 프로토콜로서,  조직이나, 개체, 그리고 인터넷이나 기업 내의 인트라넷 등 네트웍 상에 있는 파일이나 장치들과 같은 자원 등의 위치를 찾을 수 있게 해준다. LDAP 디렉토리 서비스 모델은 엔트리(entry)에 기반한다. 엔트리는 distinguished name (DN)이라고 불리는 속성(attribute)을 포함하는 속성들의 집합으로 되어 있으며, DN은 유일한 엔트리를 찾기 위해서 이용된다. LDAP은 디렉토리에 대한 질의와 갱신 연산을 정의하고, 디렉토리로부터 엔트리를 추가 또는 삭제하고, 엔트리를 변경하고 엔트리의 이름을 변경하는 연산이 제공된다. LDAP 탐색(search) 연산은 탐색 필터에 명시된 일치 기준에 맞는 엔트리를 찾기 위해 디렉토리의 일부를 찾을 수 있다. LDAP server는 주요정보를 담고 있어, 비인가된 접근은 철저히 차단되어야 한다. (TCP 389)
NETMEETING 4 주로 H.323 을 이용하여 서비스한다.
NFS 5 Port Mapper외에 파일 송수신을 위해 다수의 포트를 가변적으로 허용되어야 하며, 공격자가 NFS client로 작동하는 applets를 씀으로 접근제어를 통과하는 등 심각한 취약점이 다수 존재한다.(TCP, UDP 2049,111)
NNTP 4 유즈넷 뉴스그룹 상에 올려진 글들을 관리하기 위해 컴퓨터들(클라이언트와 서버 모두)에 의해 사용되는 store and forward 프로토콜이다. NNTP는 원래 유즈넷 프로토콜이었던 UUCP (UNIX-to-UNIX Copy Protocol)를 대체한 것이다. NNCP 서버는 수집된 유즈넷 뉴스그룹들의 네트웍을 관리하고, 인터넷 액세스 제공자가 제공하는 서버를 전체의 일부로서 포함시킨다. NNTP 클라이언트는 넷스케이프나, 인터넷 익스플로러, 오페라 또는 다른 웹브라우저의 일부로서 포함될 수 있으며, 뉴스리더라고 불리는 별도의 클라이언트 프로그램을 사용할 수도 있다. 포트가 오픈 유즈넷서버를 찾아내기 위해 사용된다. 대체적으로 정상적 커넥션이 이루어져 위험도는 높지 않다.(TCP 119)
NTP 3 NTP variables를 질의함으로 remote host의 OS descriptor, time settings등의 정보를 얻을 수 있다. NTP peer relationships를 알아냄으로 네트웍 세팅에 대한 정보를 알아낼 수 있다. 위험도는 높지 않다.(UDP 123)
ORACLE-LISTENER 5 Client상에서 DB의 접근이 가능하기 때문에 일반계정으로 접근 후 루트 권한의 획득이 가능할 수 있다. 
OSPF 4 독립적인 네트웍 내에서 라우팅 정보 관리를 위해 광범위하게 사용된다. DRDoS의 target이 된다. 
PC-anywhere 5 원격제어 및 파일전송이 가능하며, 접근이 성공되었을 경우 PC와 같은 세크먼트에 존재하는 모든 네트워크 장비들은 스니핑이 가능하다. (UDP 5632, 22 TCP 5631)
PING 3 remote host의 상태가 dead or alive인지 정보를 준다. 위험도는 적다 .
POP3 3 client가 e-mail서버에 접근하기 위해 사용된다. 로그인하지 않은 상태에서 버퍼 오버플로우를 발생시켜 유저네임이나  패스워드를 변경할 수 있으며, 로그인된 상태에서 여러 버퍼 오버플로우 공격을 할 수 있다. (TCP 110)
PPTP 5 Microsoft 사의 PPTP는 인터넷에서 remote access VPN을 구성하는데 널리 사용되는 클라이언트/서버 기반의 Tunneling Protocol이다. PPP 트래픽을 encapsulation하기 때문에, IP, IPX, NetBEUI, AppleTalk 등의 다양한 상위 로컬 네트웍 프로토콜을 사용할 수 있으며 transit internetwork이 IP 네트웍일 것을 요구한다. End-Point들 사이에 하나의 Tunnel만을 지원하며 사용자 인증(PAP, CHAP, MS-CHAP, EAP)이나 데이터 암호화/압축 (CCP, ECP) 등의 보안 기능은 PPP에서 제공하는 것을 사용한다. 완전한 신뢰관계에 있는 제한된 host 사이에서만 허용한다. (TCP 1723)
REAL MEDIA 3 video straming과 audio service를 제공한다. Client가 server로부터 audio streams을 받을 때는 UDP포트로, control connection은 TCP 7070 포트를 사용한다.
RIP 4 독립적인 네트웍 내에서 라우팅 정보 관리를 위해 광범위하게 사용된다. DRDoS의 target이 된다. 
RLOGIN 5 rlogin은 client와 server 사이의 데이터가 암호화되지 않은 상태로 흐르기 때문에 스니핑이 가능하며 이는 login ID와 PASSWORD도 포함된다. 신뢰관계가 잘못 설정된 경우 패스워드의 입력없이 바로 서버로 접근이 가능하며 심감한 보안취약점으로 인해 신뢰관계를 설정하여 루트 권한으로의 접근이 가능하다.
SMTP(MAIL) 4 향상 최신의 패치한 상태로 서비스를 하여야 하며, 메일 Relay기능을 제한한다. 인터넷에 공개되어 있고, e-mail routing이 복잡하여 보고된 취약점(루트권한의 획득 가능)이 많다.(TCP 25)
SNMP 5 네트워크 장비의 상황을 볼 수 있는 인테페이스를 제공하며 관리 데이타의 분석, 장애관리 등의 기능수행을 위한 데이타베이스를 구축하고 있다. Get : 장비의 상태 및 가동시간등의 관리 정보를 읽어 들인다. 특정 장비의 정보를 읽으려면 메시지의 송신자로서 관리자는 그 장비를 표시하는 작은 프로그램인 에이전트에 조회를 한다. 관리자는 MIB의 트리구조를 이용해 필요한 정보를 찾는 객체를 알아내고 응답을 해석한다. Set : 장비의 MIB을 조작하여 장비를 제어한다. 관리자는 요청을 보내 다시 초기화 시키거나, 프로그램에 따라 스스로를 다시 재구성한다. Trap : 관리자에게 보고하는 Treshold나 Event를 말한다. 장비 에이전트는 경고, 고장통지등 관리자가 미리 설정한 유형의 보고서를 생성한다. SNMP의 Community String은 manager와 agent사이의 메시지를 인증하기 위해 사용되는데, 알기쉬운(Public, Private, 회사이름등…) 이름이나 Brute-force 공격으로 알아낼 수 있는 쉬운 조합으로 만들 경우 Set/Get 명령어등으로 접근할 수 있으며, 현재까지 서비스거부공격, 버퍼오버플로우공격 등 여러 취약점이 있다.(TCP, UDP 161,162)
SSH 5 Telnet보다 강한 인증기능을 가지고 다른 컴퓨터에 로그온 할 수 있으나, SSH host 의 domain을 스캔당할 수 있으며, 일반계정으로의 접근 후 OS상에 존재하는 취약점을 이용하여 루트권한의 획득이 가능하다. (TCP 22)
SYSLOG 3 log를 기록하는 전용 데몬( 항상 떠 있어서, 다른 프로그램의 요청에 응답하는 것)이다.
UDP Flood등의 DoS 공격의 대상이 될 수 있다. (UDP 514)
TALK 3 visual communication을 제공한다. 알려지지 않은 유저에 의해 정보가 유츨될 수 있다. (UDP 517, 518)
TCP-ANY 6 모든 TCP 포트를 허용하므로 Incoming 정책에 사용 불가하다. (임시적으로만 사용, 출발지/목적지등을 제한할 경우에 한하여 사용)
TELNET 5 일반계정으로의 접근 후 OS상에 존재하는 취약점을 이용하여 루트권한의 획득이 가능하다. telnet은 client와 server 사이의 데이터가 암호화되지 않은 상태로 흐르기 때문에 스니핑이 가능하며, 이는 login ID와 PASSWORD도 포함된다. (TCP 23)
TFTP 5 remote user가 login(ID와 패스워드의 인증)없이 파일을 읽고, 쓸 수 있어 위험도가 높다.  펌웨어를 업그레이드등의 경우에 주로 사용된다. TCP wrapper를 사용하며 접근을 제한하며, root directory로 아닌 subdirectory로 접근하게 하여 필요이상의 파일 접근을 피하도록 해야한다. (UDP 69)
TRACEROUTE 4 특정 호스트에 접근하기 위한 path의 정보를 제공한다. (UDP 33400-34000)
UDP-any 6 모든 UDP 포트를 허용하므로 Incoming 정책에 사용 불가하다. (임시적으로만 사용, 출발지/목적지등을 제한할 경우에 한하여 사용)
UUCP 5 시스템들 간에 파일을 복사, 실행될 명령어들을 전송할 수 있다. (UDP 540)
VDO-LIVE 3 video straming service를 제공한다. (UDP 7000-7010)
WAIS 4 특정 데이타베이스 등을 키워드로 고속 검색하여 액세스하는 환경을 제공한다. (TCP 210)
WINFRAME 4 서버에 연결된 컴퓨터 워크스테이션이 윈도우 프로그램과 데이터를 사용할 수 있도록 환경을 제공한다. (TCP 1494)
X-WINDOW 5  리눅스를 비롯해 대부분의 유닉스에 채용되어 있으며, 대상 host의 그래픽 환경 기반 window를 제공한다. TCP 다수의 포트(6000-6063)를 허용한다. (TCP 6000-6063)
BGP 3 인터넷환경이 보안적으로 여러 위험성에 노출되기 이전에 고안되었기에 데이터를 조작하거나 삭제하는 등 네트웍 라우팅에 좋지 않은 영향을 미칠 가능성이 있는 여러 가지 공격 방법에 대처하는 메커니즘을 가지고 있지 않다. SYN packet을 이용하여 SYN FLOODING을 일으길 경우 bgp port(TCP 179)가 DRDoS의 target이 된다.
DHCP-relay 2 세그먼트간의 지점간에 위치하여 다른 DHCP에서 IP를 받을 수 있도록 포워드하는 기능이다. Address assignment가 유출될 경우 man-in-the-middle 공격 등에 노출된다. ( UDP 67)
DNS 2 잘 알려진 포트이므로 공격자의 주요목표가 된다. 불필요한 사용자에게 DNS Zone Transfer를 허용하지 말아야 한다. 해당 도메인의 Zone에 대한 복사본을 얻기 위해 Primary Name Server로부터 Zone 데이터베이스를 끌어오는 작업을 Zone Transfer라 하는데, 이는 Primary Name Server가 다운될 경우 Secondary Name Server가 그 역할을 대신하게 되기 때문에 양쪽 서버간의 정보를 일관성 있게 유지시키기 위해 수행되는 작업이다. 일반적으로 Zone Transfer는 Second Name Server에서만 Zone Transfer를 할 수 있도록 하면 된다. 허가되지 않는 사용자에게 Zone Transfer를 허용할 경우 DNS 서버의 중요한 정보가 유출되게 된다. 즉, 공격자는 전송 받은 Zone 정보를 이용하여 호스트 정보, 네트워크 구성 형태 등의 많은 정보를 파악할 수 있게 된다. 대부분의 공격도구(주로 취약점 스캐너)는 공격하고자 하는 시스템의 IP 리스트를 얻기 위해 Zone Tranfer를 이용한다. 대부분의 사이트에서 DNS 서버를 디폴트로 설치할 경우 임의의 사용자가 Zone Transfer 를 할 수 있도록 설정된다. DNS 코드 취약점을 이용하여 DNS 서버에게 교묘히 조작된 패킷을 보냄으로써 버퍼 오버플로우를 발생시켜  공격자가 원하는 코드를 실행시키거나 루트 쉘을 얻을 수 있다. (TCP, UDP 53)
FINGER 2 로그온한 사용자, operating system에 대한 정보 제공한다. (TCP 79)
FTP 5 읽고 쓰기가 가능하여 시스템의 손상, 파괴가 가능하다. 버퍼 오버플로우를 일으켜 root권한을 획득하거나 DOS 공격하는 등 취약점이 다수 존재한다.(TCP 20,21)
FTP-GET 2 읽기가 가능하여 시스템의 정보 유출이 가능하다. 버퍼 오버플로우를 일으켜 root권한을 획득하거나 DOS 공격하는 등 취약점이 다수 존재한다.
FTP-PUT 5 쓰기가 가능하여 시스템의 손상, 파괴가 가능하다. 버퍼 오버플로우를 일으켜 root권한을 획득하거나 DOS 공격하는 등 취약점이 다수 존재한다.
GOPHER 2 고퍼는 웹 서비스가 개발되기 이전까지는 인터넷의 가장 쉬운 인터페이스로 사용되었다. 고퍼는 정보의 내용을 주제별 또는 종류별로 구분하여 메뉴로 구성함으로써, 인터넷에 익숙하지 않은 사람도 쉽게 정보를 찾아볼 수 있게 만들었다. 고퍼는 인터넷의 다른 기능들, 즉 원격접속(telnet), 파일전송(ftp), 뉴스(news)등의 기능을 고퍼 메뉴 속에서 실행할 수 있고, 고퍼 서버들끼리 서로 연결되어 있어서 여러 개의 고퍼 서버를 이동하면서 자신이 필요로 하는 정보를 쉽게 찾을 수 있다. 고퍼로 FTP session을 맺을 경우, 서버의 ftp directory로 접속을 제한할지라도 bounce attack(제삼의 서버를 이용하여 공격대상의 네트워크를 스캐닝할 수 있는)에 이용될 수 있다. (TCP 70)
H.323 2 그 자체가 정의된 하나의 규약(protocol)이 아니라 각종 규약들(H.224, H.245 등)을 모아놓은 프로토콜 스택이다. H.323은 음성 및 영상 데이터를 TCP/IP,UDP 등의 패킷 교환 방식의 네트워크를 통해 전송하기 위해 채택된 표준으로, 이러한 패킷 방식의 데이터 전송의 예가 VoIP이다. 양방향으로 설정 필요하며, 다수의 포트 허용으로 보안에 취약하다.
HTTP 2 Web Server의 개방성과 CGI/JAVA/PHP등의 content script의 취약점에서 오는 원격 해킹의 가능성이 존재하며, 이런 코드들의 보안성 점검이 필요하다. 정보유출과 루트 권한의 획득이 가능하다. Web server log의 개인 정보가 적절한 인증없이 조회되지 않도록 해야한다. (TCP 80)
HTTPS 2 SSL을 사용하기 때문에 HTTP 프로토콜보다는 보안상 안전하나, content script의 취약점에서 오는 원격 해킹의 가능성이 존재하며, 이런 코드들의 보안성 점검이 필요하다. 정보유출과 루트 권한의 획득이 가능하다. (TCP 443)
ICMP-INFO 2 remote host 가 ICMP_MASKREQ query 에 응답하여 netmask 등의 정보를 보내준다. 공격자는 네트웍이 어떻게 구성되고 라우팅 되는지에 관한 정보를 얻을 수 있다. 위험도는 높지 않다.
ICMP-TIMESTAMP 2 remote host가 ICMP timestamp request에 응답한다. 이것은 공격자가 그 host의 세팅된 시간정보를 알려줌으로 시간에 기초한 인증 protocols를 통과하도록 돕는다. ICMP timestamp requests와 outgoing ICMP timestamp replies를 필터링해야 하며 위험도는 높지 않다.
IKE 2 IPSec을 하는 장비간에 암호화 알고리즘과 인증방식을 서로 설정한다.
IMAP 2 POP3와 유사한 취약성을 가지고 있다. 로그인하지 않은 상태에서 버퍼 오버플로우를 발생시켜 유저네임이나  패스워드를 변경할 수 있으며, 로그인된 상태에서 여러 버퍼 오버플로우 공격을 할 수 있다. (TCP 143)
INTERNET LOCATER SERVICE 2 LDAP, LDAP over SSL/TSL, user locater service를 포함한다.
IRC 2 일련의 규칙과 약속이 관련되어 있는 채팅 시스템으로, 동시에 여러 사용자의 태화를 제공하는 클라이언트/서버 구조의 소프트웨어이다. 어떤 흔적도 남기지 않은 채(영수증없는 금융거래처럼)  파일전송이 이루어질 수 있다. (TCP 6660-9)
L2TP 5 인터넷 표준인 L2TP (RFC 2661)는 인터넷에서 remote access VPN을 구성하는데 널리 사용되는 클라이언트/서버 기반의 Tunneling Protocol이다. Layer 2의 PPP 트래픽에 대한 Encapsulation을 통해 두 지점간의 터널을 생성, 관리, 소멸시켜주는 것이 기본 기능이며, 보안은 대부분 PPP에서 제공하는 보안기능에 의존하므로 보다 강한 보안을 위해 IPSEC을 사용해야 한다. Layer 2 Tunneling은 크게 tunnel initiator에 따라 Voluntary Tunneling과 Compulsory Tunneling으로 나눌 수 있다. Voluntary Tunneling은 client-initiated Tunneling으로 클라이언트가 직접 Tunnel 서버(보통의 Remote Access Server(RAS), IETF 용어로는  PPTP/L2TP Network Server(PNS/LNS)로 불림)와 Tunnel을 형성하므로 클라이언트간의 End-to-End Tunnel이 형성되며, 클라이언트에 PPTP/L2TP 프로토콜이 탑재되어 있어야 한다. 반면 Compulsory Tunneling은 ISP-initiated Tunneling으로 인터넷 서비스 제공자(ISP) Remote Access Switch가 클라이언트를 대신해서 터널을 열어 주는 경우로 클라이언트에 Tunneling Protocol이 탑재되어 있지 않은 경우나, ISP에서 VPN 서비스를 제공해 주는 경우에 사용되며, PAC/LAC-PNS/LNS간에 Tunnel이 형성된다. L2TP는 Packet-Oriented Point-to-Point 접속을 제공하는 네트웍만 보장되면, 어떤 전송 프로토콜 상에서도 사용 가능하다 (e.g. IP, Frame Relay PVCs, ATM VCs 등). Multiple- Tunnel을 허용하여 QoS에 따라 서로 다른 Tunnel을 이용할 수 있다. L2TP는 헤더 압축 및 Tunnel-End-Point 인증 (패킷단위의 인증이 아니라, Tunnel End-Point들의 Identity에 대한 인증) 기능을 제공한다. 서로 완전한 신뢰관계에 있는 제한된 host 사이에서만 허용한다.
LDAP 2 TCP/IP 상에서 수행하는 디렉토리 서비스 프로토콜로서,  조직이나, 개체, 그리고 인터넷이나 기업 내의 인트라넷 등 네트웍 상에 있는 파일이나 장치들과 같은 자원 등의 위치를 찾을 수 있게 해준다. LDAP 디렉토리 서비스 모델은 엔트리(entry)에 기반한다. 엔트리는 distinguished name (DN)이라고 불리는 속성(attribute)을 포함하는 속성들의 집합으로 되어 있으며, DN은 유일한 엔트리를 찾기 위해서 이용된다. LDAP은 디렉토리에 대한 질의와 갱신 연산을 정의하고, 디렉토리로부터 엔트리를 추가 또는 삭제하고, 엔트리를 변경하고 엔트리의 이름을 변경하는 연산이 제공된다. LDAP 탐색(search) 연산은 탐색 필터에 명시된 일치 기준에 맞는 엔트리를 찾기 위해 디렉토리의 일부를 찾을 수 있다. LDAP server는 주요정보를 담고 있어, 비인가된 접근은 철저히 차단되어야 한다. (TCP 389)
NETMEETING 2 주로 H.323 을 이용하여 서비스한다.
NFS 5 Port Mapper외에 파일 송수신을 위해 다수의 포트를 가변적으로 허용되어야 하며, 공격자가 NFS client로 작동하는 applets를 씀으로 접근제어를 통과하는 등 심각한 취약점이 다수 존재한다.(TCP, UDP 2049,111)
NNTP 2 유즈넷 뉴스그룹 상에 올려진 글들을 관리하기 위해 컴퓨터들(클라이언트와 서버 모두)에 의해 사용되는 store and forward 프로토콜이다. NNTP는 원래 유즈넷 프로토콜이었던 UUCP (UNIX-to-UNIX Copy Protocol)를 대체한 것이다. NNCP 서버는 수집된 유즈넷 뉴스그룹들의 네트웍을 관리하고, 인터넷 액세스 제공자가 제공하는 서버를 전체의 일부로서 포함시킨다. NNTP 클라이언트는 넷스케이프나, 인터넷 익스플로러, 오페라 또는 다른 웹브라우저의 일부로서 포함될 수 있으며, 뉴스리더라고 불리는 별도의 클라이언트 프로그램을 사용할 수도 있다. 포트가 오픈 유즈넷서버를 찾아내기 위해 사용된다. 대체적으로 정상적 커넥션이 이루어져 위험도는 높지 않다.(TCP 119)
NTP 2 NTP variables를 질의함으로 remote host의 OS descriptor, time settings등의 정보를 얻을 수 있다. NTP peer relationships를 알아냄으로 네트웍 세팅에 대한 정보를 알아낼 수 있다. 위험도는 높지 않다.(UDP 123)
ORACLE-LISTENER 2 Client상에서 DB의 접근이 가능하기 때문에 일반계정으로 접근 후 루트 권한의 획득이 가능할 수 있다. 
OSPF 2 독립적인 네트웍 내에서 라우팅 정보 관리를 위해 광범위하게 사용된다. DRDoS의 target이 된다. 
PC-anywhere 2 원격제어 및 파일전송이 가능하며, 접근이 성공되었을 경우 PC와 같은 세크먼트에 존재하는 모든 네트워크 장비들은 스니핑이 가능하다. (UDP 5632, 22 TCP 5631)
PING 2 remote host의 상태가 dead or alive인지 정보를 준다. 위험도는 적다 .
POP3 2 client가 e-mail서버에 접근하기 위해 사용된다. 로그인하지 않은 상태에서 버퍼 오버플로우를 발생시켜 유저네임이나  패스워드를 변경할 수 있으며, 로그인된 상태에서 여러 버퍼 오버플로우 공격을 할 수 있다. (TCP 110)
PPTP 5 Microsoft 사의 PPTP는 인터넷에서 remote access VPN을 구성하는데 널리 사용되는 클라이언트/서버 기반의 Tunneling Protocol이다. PPP 트래픽을 encapsulation하기 때문에, IP, IPX, NetBEUI, AppleTalk 등의 다양한 상위 로컬 네트웍 프로토콜을 사용할 수 있으며 transit internetwork이 IP 네트웍일 것을 요구한다. End-Point들 사이에 하나의 Tunnel만을 지원하며 사용자 인증(PAP, CHAP, MS-CHAP, EAP)이나 데이터 암호화/압축 (CCP, ECP) 등의 보안 기능은 PPP에서 제공하는 것을 사용한다. 완전한 신뢰관계에 있는 제한된 host 사이에서만 허용한다. (TCP 1723)
REAL MEDIA 2 video straming과 audio service를 제공한다. Client가 server로부터 audio streams을 받을 때는 UDP포트로, control connection은 TCP 7070 포트를 사용한다.
RIP 2 독립적인 네트웍 내에서 라우팅 정보 관리를 위해 광범위하게 사용된다. DRDoS의 target이 된다. 
RLOGIN 2 rlogin은 client와 server 사이의 데이터가 암호화되지 않은 상태로 흐르기 때문에 스니핑이 가능하며 이는 login ID와 PASSWORD도 포함된다. 신뢰관계가 잘못 설정된 경우 패스워드의 입력없이 바로 서버로 접근이 가능하며 심감한 보안취약점으로 인해 신뢰관계를 설정하여 루트 권한으로의 접근이 가능하다.
SMTP(MAIL) 2 향상 최신의 패치한 상태로 서비스를 하여야 하며, 메일 Relay기능을 제한한다. 인터넷에 공개되어 있고, e-mail routing이 복잡하여 보고된 취약점(루트권한의 획득 가능)이 많다.(TCP 25)
SNMP 2 네트워크 장비의 상황을 볼 수 있는 인테페이스를 제공하며 관리 데이타의 분석, 장애관리 등의 기능수행을 위한 데이타베이스를 구축하고 있다. Get : 장비의 상태 및 가동시간등의 관리 정보를 읽어 들인다. 특정 장비의 정보를 읽으려면 메시지의 송신자로서 관리자는 그 장비를 표시하는 작은 프로그램인 에이전트에 조회를 한다. 관리자는 MIB의 트리구조를 이용해 필요한 정보를 찾는 객체를 알아내고 응답을 해석한다. Set : 장비의 MIB을 조작하여 장비를 제어한다. 관리자는 요청을 보내 다시 초기화 시키거나, 프로그램에 따라 스스로를 다시 재구성한다. Trap : 관리자에게 보고하는 Treshold나 Event를 말한다. 장비 에이전트는 경고, 고장통지등 관리자가 미리 설정한 유형의 보고서를 생성한다. SNMP의 Community String은 manager와 agent사이의 메시지를 인증하기 위해 사용되는데, 알기쉬운(Public, Private, 회사이름등…) 이름이나 Brute-force 공격으로 알아낼 수 있는 쉬운 조합으로 만들 경우 Set/Get 명령어등으로 접근할 수 있으며, 현재까지 서비스거부공격, 버퍼오버플로우공격 등 여러 취약점이 있다.(TCP, UDP 161,162)
SSH 2 Telnet보다 강한 인증기능을 가지고 다른 컴퓨터에 로그온 할 수 있으나, SSH host 의 domain을 스캔당할 수 있으며, 일반계정으로의 접근 후 OS상에 존재하는 취약점을 이용하여 루트권한의 획득이 가능하다. (TCP 22)
SYSLOG 2 log를 기록하는 전용 데몬( 항상 떠 있어서, 다른 프로그램의 요청에 응답하는 것)이다.
UDP Flood등의 DoS 공격의 대상이 될 수 있다. (UDP 514)
TALK 2 visual communication을 제공한다. 알려지지 않은 유저에 의해 정보가 유츨될 수 있다. (UDP 517, 518)
TCP-ANY 6 모든 TCP 포트를 허용하므로 Incoming 정책에 사용 불가하다. (임시적으로만 사용, 출발지/목적지등을 제한할 경우에 한하여 사용)
TELNET 2 일반계정으로의 접근 후 OS상에 존재하는 취약점을 이용하여 루트권한의 획득이 가능하다. telnet은 client와 server 사이의 데이터가 암호화되지 않은 상태로 흐르기 때문에 스니핑이 가능하며, 이는 login ID와 PASSWORD도 포함된다. (TCP 23)
TFTP 5 remote user가 login(ID와 패스워드의 인증)없이 파일을 읽고, 쓸 수 있어 위험도가 높다.  펌웨어를 업그레이드등의 경우에 주로 사용된다. TCP wrapper를 사용하며 접근을 제한하며, root directory로 아닌 subdirectory로 접근하게 하여 필요이상의 파일 접근을 피하도록 해야한다. (UDP 69)
TRACEROUTE 2 특정 호스트에 접근하기 위한 path의 정보를 제공한다. (UDP 33400-34000)
UDP-any 6 모든 UDP 포트를 허용하므로 Incoming 정책에 사용 불가하다. (임시적으로만 사용, 출발지/목적지등을 제한할 경우에 한하여 사용)
UUCP 5 시스템들 간에 파일을 복사, 실행될 명령어들을 전송할 수 있다. (UDP 540)
VDO-LIVE 2 video straming service를 제공한다. (UDP 7000-7010)
WAIS 2 특정 데이타베이스 등을 키워드로 고속 검색하여 액세스하는 환경을 제공한다. (TCP 210)
WINFRAME 2 서버에 연결된 컴퓨터 워크스테이션이 윈도우 프로그램과 데이터를 사용할 수 있도록 환경을 제공한다. (TCP 1494)
X-WINDOW 2  리눅스를 비롯해 대부분의 유닉스에 채용되어 있으며, 대상 host의 그래픽 환경 기반 window를 제공한다. TCP 다수의 포트(6000-6063)를 허용한다. (TCP 6000-6063)

'scrap' 카테고리의 다른 글

방화벽 정책에 관하여  (0) 2010.04.29
방화벽 정책(예)  (0) 2010.04.29
BPS, PPS, 프로토콜 점유율, 프로토콜 포트 점유율, 평균 패킷 사이즈  (0) 2010.04.21
XP 네트워크 명령어  (0) 2010.04.18
IDS  (0) 2010.03.27

네트워크를 체크하려면 알아야 되는 지식들이 몇가지 있다. 아래 있는 것들도 그중 하나.

PPS를 보자면 대역폭별로 사용할 수 있는 최대 패킷 수이다.

현재 멤버십에서는 10Mbps급을 사용하고 있다. IEEE에서는 각 회선별 PPS를 정의하고 있다.

10Mbps = 14,880 pps

100Mbps = 148,800 pps

1Gbps = 1,488,000 pps


 인터넷 회선의 트래픽 양 (BPS)
   현재 트래픽이 인터넷 회선 대역폭의 80%에서 70% 미만을 점유하는 것이 좋습니다. 70%에서
   80%를 넘게되면 패킷들이 전송대기 상황이 발생되고 이에 따른 대기 지연이 발생하여 응답시간
   에 나쁜 영향을 미치게됩니다. 80%이상을 넘게되면 응답시간은 지수함수로 증가하게되어 심각
   한 응답속도의 증가를 겪게 됩니다. 통상 송 수신별로 트래픽 양을 평가하게 되는 데 어느 한
   방향의 트래픽 양이 80%이상을 넘게되면 비록 반대 방향의 트래픽이 정상적이라 하더라도
   응답속도가 요청에 대한 응답이므로 영향을 받게됩니다.

 인터넷 회선의 패킷 수 (PPS)
   인터넷 회선의 대역폭별로 처리가능한 최대 패킷 수가 제한됩니다.
   패킷의 크기는 최소 64바이트 이므로 회선 대역을 이 최소 패킷 바이트로 나누면 최대 패킷 수를
   얻을 수 있습니다. 이 처리 패킷 수는 네트워크 장비의 처리 용량과 밀접한 관계가 있습니다.
   회선 대역폭이 최대 패킷수를 수용할 수 있다고 하더라도 연결된 네트워크 장비가 이 패킷들을
   처리하지 못하게 되면 네트워크가 마비되게 됩니다. 대표적인 경우가 웜 바이러스에 의한
   네트워크 마비 현상인데 이 경우가 바로 웜이 폭발적으로 작은 사이즈의 패킷을 무수히 많이
   보내 네트워크 장비의 처리용량을 초과하도록 하여 결국 네트워크 장비가 다운되게 되어
   네트워크를 통한 업무가 마비되거나 지연되게 됩니다.

 프로토콜 점유율
   일반적인 네트워크 환경 하에서 TCP의 점유율이 UDP에 비해 높습니다. 각 네트워크 환경별로
   차이는 있으나 일반적으로 UDP의 회선 점유율이 TCP보다 높거나 30%가 넘는 경우는 비정상적
   이라고 볼 수 있습니다. 단, 비디오 강의나 교육방송과 같은 스트리밍 서비스의 경우에는 UDP의
   회선 점유율이 높을 수 있습니다. 마찬가지 ICMP나 기타 프로토콜이 많이 점유를 하고 있다면
   웜에 의한 이상 트래픽임을 추정할 수 있습니다.

 프로토콜 포트 점유율
   일반적으로 TCP의 점유율이 70%이상이며, TCP 포트 중 80(http) 포트가 50% 이상을 대부분
   차지합니다. 단, P2P와 같은 파일공유 트래픽을 허용하는 네트워크 에서는 80(http)의 점유율이
   낮을 수 있습니다. 통상적으로 만약 TCP포트 중 80(http)포트가 아닌 다른 포트의 점유율이
   높다면 비정상인 트래픽 형태라고 볼 수 있습니다. 

 평균 패킷사이즈
   네트워크에 연결된 사용자가 인터넷의 웹사이트에 접속할 때, 인터넷 회선을 지나가는 패킷의
   평균사이즈를 대략 계산하면 {송신(64byte) + 수신(1518byte)} / 2 하면 대략 790byte가 됩니다.
   웜이나 바이러스와 같은 트래픽은 일반적으로 64byte의 패킷사이즈를 가지고 있으므로, 내부
   네트워크에 웜이나 바이러스 트래픽이 발생한다면, 평균 패킷사이즈는 매우 작아질 것입니다.
   일반적으로 정상적인 네트워크 환경에서의 평균 패킷사이즈는 700byte ~ 900byte이며,
   비정상적인 경우에는 600byte 미만으로 내려가는 경향이 있습니다.

'scrap' 카테고리의 다른 글

방화벽 정책(예)  (0) 2010.04.29
방화벽 정책  (0) 2010.04.29
XP 네트워크 명령어  (0) 2010.04.18
IDS  (0) 2010.03.27
IPS  (0) 2010.03.27

01. 라우팅 테이블 확인 명령어

route print

 

02. IP주소를 초기화 하고 다시 받아오는 명령어 및 옵션

ipconfig /release : 네트워크어댑터의 ip 주소 제거

ipconfig /renew : ip 주소 갱신

 

03. 클라이언트의 DNS 캐시정보를 비우는 명령어 및 옵션

ipconfig /flushdns

 

04. 명령어 입력시 나타나는 결과값을 "test.txt"로 저장

C:>ipconfig > test.txt (내용을 추가할 땐">>" )

 

05. PC 에서 상대방 맥 어드레스를 확인하는 명령어

nbtstat -a (상대방 IP 주소 )

 

06. Mac Table 확인

arp –a

 

07. DNS 확인

nslookup (상대방 IP 주소)


Bloger: moltak.net

'scrap' 카테고리의 다른 글

방화벽 정책  (0) 2010.04.29
BPS, PPS, 프로토콜 점유율, 프로토콜 포트 점유율, 평균 패킷 사이즈  (0) 2010.04.21
IDS  (0) 2010.03.27
IPS  (0) 2010.03.27
IPS  (0) 2010.03.27
■ IDS 침입탐지시스템
   IDS는 Intrusion Detection System 의 약자로 한글로 "침입탐지시스템"이라고 불립니다.
   침입탐지를 하기 위해 관찰하고 있는 대상에 따라 H-IDS와 N-IDS의 두가지 분류로 나누고 있습니다.

   Host(컴퓨터)에서 일어나고 있는 일련의 활동들을 감시하고 침입 발생에 대해
   탐지를 하는 IDS를 H-IDS(Host-based IDS)라고 부르며,
   Network 상에서 일어나는 활동들을 감시하고 침입 시도를 탐지하는
   IDS를 N-IDS(Network-based IDS)라고 합니다.

   H-IDS는 감시 대상이 되는 host(컴퓨터)에 탑재가 되며, N-IDS는 지나가는 트래픽들을 볼 수 있는
   감시 대상이 되는 네트워크단에 설치가 됩니다. 
 
■ 기능
   - 일반적으로 시스템에 대한 원치 않는 조작을 탐지하여 준다. 
     ? 침입 탐지 시스템은 전통적인 방화벽이 탐지할 수 없는 모든 종류의 악의적인 
        네트워크 트래픽 및 컴퓨터 사용을 탐지하기 위해 필요하다. 
        이것은 취약한 서비스에 대한 네트워크 공격과 에플리케이션에서의 데이터 처리 공격(data driven attack) 
        그리고 권한 상승(privilege escalation) 및 침입자 로그인 / 침입자에 의한 주요 파일 접근 / 
        멀웜(컴퓨터 바이러스, 트로이 목마, 웜)과 같은 호스트 기반 공격을 포함한다.
 
     ? IDS는 여러개의 컴포넌트들로 구성된다: 

        센서는 보안 이벤트를 발생시키며, 

        콘솔은 이벤트를 모니터하고 센서를 제어하거나 경계시키며(alert), 

        중앙 엔진은 센서에 의해 기록된 이벤트를 데이터베이스에 기록하거나, 시스템 규칙을 사용하여 

        수신된 보안 이벤트로부터 경고를 생성한다. 

 

        IDS를 분류하는 방법은 센서의 종류와 위치 그리고 엔진이 경고를 만드는데 사용하는 방법론에 따라 여러가지가 있다. 

        많은 간단한 IDS들은 위의 세개의 컴포넌트들을 하나의 장치 또는 설비로 구현하고 있다.


 
악용 탐지(Misuse Detection) 대 비정상 탐지(Anomaly Detection)
■ 악용탐지시스템(Misuse Detection System)

   시그니쳐 기반 침입 탐지 시스템으로도 알려진 악용 탐지 시스템은 악의적인 것으로 

   추정되는 트래픽 또는 애플리케이션 데이터의 패턴을 감시하여 침입을 식별한다. 

   이러한 종류의 시스템은 오직 '알려진' 공격만 탐지할 수 있다고 여겨진다. 

   그러나 그들의 규칙 집합에 따라, 시그니쳐 기반 IDS들은 때때로 알려진 공격들과 서로 특징을 공유하는 

   (예를 들어 HTTP GET 요청을 통한 'cmd.exe' 접근과 같은) 새로운 공격들을 탐지할 수 있다.

   IDS는 채집된 정보를 분석하여, 공격 시그니쳐를 저장하는 거대한 데이터베이스를 통해 그것을 비교한다. 

   IDS는 본질적으로 이미 문서화된(알려진) 특정 공격을 찾는 것이다. 

   바이러스 탐지 시스템에서처럼, 악용 탐지 소프트웨어는 단지 패킷을 비교하기 위해 사용되는 

   공격 시그니쳐 데이터베이스나 마찬가지이다.

 

■ 변칙기반침입탐지 시스템(Anomaly Based Intrusion Detection System)

   변칙 기반 침입 탐지 시스템은 네트워크 또는 호스트의 일반적인 동작과 다른것으로 추정되는 트래픽 또는 

   애플리케이션 컨텐트를 시스템 운영자에게 알리는 것으로 침입을 식별한다.

   변칙 기반 IDS는 일반적으로 이것을 스스로 학습하여 이룬다.

   변칙 탐지에서, 시스템 관리자는 네트워크의 트래픽 로드, 고장(breakdown), 프로토콜, 

   그리고 일반적인 패킷 크기에 대한 기준선 또는 일반 상태를 정의한다. 

   변칙 탐지자(anomaly detector)는 네트워크 세그먼트를 모니터하여 정의된 기준과 그들의 상태를 비교하고 변칙을 찾는다.


 
네트워크 기반 시스템 대 호스트 기반 시스템
■ 네트워크기반 시스템

   네트워크 기반 시스템(또는 N-IDS)에서 센서는 모니터할 네트워크 또는 종종 DMZ나 

   네트워크 경계의 초크 지점(choke point)에 위치한다. 

   센서는 악의적 트래픽 탐지를 위해 모든 네트워크 트래픽의 흐름을 캡쳐하여 각각의 패킷 내용을 분석한다. 

   호스트 기반 시스템에서 센서는 보통 그것이 설치된 호스트의 모든 활동을 감시하는 소프트웨어 에이전트로 구성된다.

   이 두가지 형식이 혼합된 하이브리드 시스템 역시 존재한다.

 

   - 네트워크 침입 탐지 시스템은 네트워크 트래픽을 검사하고 여러 호스트들을 모니터하여 침입을 식별하는 독립된 플랫폼이다. 

      네트워크 침임 탐지 시스템은 포트 미러링 또는 네트워크 탭(network tap)을 위해 설정된 허브, 네트워크 스위치에 연결하여 

      네트워크 트래픽에 접근한다.

   - 호스트 기반 침입 탐지 시스템은 호스트에서 시스템 콜, 애플리케이션 로그, 파일 시스템의 수정사항(이진 파일, 패스워드 파일, 

      capability/acl 데이터베이스) 그리고 호스트의 동작과 상태등을 분석하여 침입을 식별하는 에이전트로 구성된다.

   - 하이브리드 침입 탐지 시스템은 위의 두가지 방식을 결합한 것이다. 호스트 에이젼트 데이터는 네트워크의 종합적인 관점을 위해 

      네트워크 정보와 결합된다. 하이브리드 IDS 중 하나로 Prelude가 있다.

 


수동적 시스템 대 반응적 시스템
■ 수동적 시스템

   수동적 시스템에서의 IDS 센서는 가능성 있는 보안 침해 사항을 탐지하여, 정보를 로그로 기록하고 콘솔을 통해 경고 신호를 보낸다. 

 

■ 반응적 시스템

   반응적 시스템에서의 IDS 센서는 의심스러운 동작에 대해 자율적으로 또는 시스템 운영자에 의해 사용자를 로그 오프 시키거나, 

   방화벽을 다시 프로그래밍하여 의심스러운 악의적 출처로부터 네트워크 트래픽을 차단하도록 응수한다.

 

비록 둘다 네트워크 보안과 관련되지만, IDS는 침입 발생 자체를 막기 위한 방화벽과는 다르다. 

방화벽은 침입을 막기 위해 네트워크 사이의 접근을 제한하며, 네트워크 내에서 공격 신호를 보내지 않는다

(does not signal an attack from inside the network). 

반면에 IDS는 일단 의심스러운 침입이 발생하면 그것을 평가하고 경보 신호를 보낸다. 

IDS는 또한 현 시스템 내부에서 발생한 공격에 대해서도 감시한다.

이것은 전통적으로 네트워크 통신을 검사하고, 일반적인 컴퓨터 공격에 대한 휴리스틱과 (시그니쳐로도 알려진) 패턴을 식별하며, 

시스템 운영자에게 경고하기 위한 동작을 취하는 것으로 성취된다. 

네트워크 연결을 끝내는 시스템은 침입 차단 시스템이라 불리며, 이것은 애플리케이션 계층 방화벽의 또 다른 형태이다.

 

 



--------------------------------------------------------------------------------


요약정리

 

IDS 개요

1. 방화벽이 내부망 보안을 수행하는데 있어 그 적용의 한계가 드러나 이를 보완 해줄 시스템의 필요

2. 침입의 패턴 데이터베이스와 Expert System을 사용해 네트워크나 시스템의 사용을 실시간 모니터링 하고 침입을 탐지하는 역할

 

IDS 정의

1. IDS는 단순한 접근제어 기능을 넘어 침입의 패턴 데이터베이스와 Expert system을 사용해 네트워크나 시스템의 사용을 

    실시간 모니터링 하고 침입을 탐지하는 보안 시스템을 의미

2. IDS는 허가되지 않은 사용자로부터 접속, 정보의 조작, 오용, 남용 등 컴퓨터 시스템 또는 네트워크상에서 시도 됐거나 

    진행중인 불법적인 예방에 실패한 경우 취할 수 있는 방법으로 의심스러운 행위를 감시하여 가능한 침입자를 조기에 발견하고

    실시간 처리를 목적으로 하는 시스템

 

IDS의 주요 목적

1. 시스템 자원의 보호

2. 공격 대응 및 복구

3. 통계적 분석 보고

4. 증거 수집 및 역추적

5. 정보 유출 방지

 

IDS 주요 기능

1. 저 수준 필터링, 고 수준 필터링을 이용한 감시자료 수집 기능

2. Misuse(오용) 침입 탐지 기능

3. Anomaly(비정상) 침입 탐지 기능

4. 서비스 거부 탐지 기능

5. 자동 침입 분류 기능

6. 침입 탐지 경보 및 대응

7. 시스템 취약점 점검 및 복구 기능

8. 편리한 사용자 인터페이스 기능

9. 침입자 역추적 기능

 

탑지영역에 따른 IDS 분류

1. H-IDS(Host based IDS)

   - 개별 호스트의 O/S가 제공하는 보안감사 로그, 시스템 로그, 사용자 계정 등의 정보를 이용해서 호스트에 대한 공격을 탐지

   - 각 호스트에 상주하는 Agent 와 이들을 관리하는 Agent Manager로 구성

   - 중요한 시스템 파일이나 실행코드에 대한 무결성 검사 기능이나 시스템의 취약점들을 탐지해 주는 취약성 스캐너(Vulerability Scanner)

      등과 결합되어 사용

   - 특정 시스템과의 O/S와 밀접히 결합되어 각종 행위를 분석하므로 정교한 모니터링과 로깅이 가능

   - IDS 문제 발생 시 해당 호스트에 영향을 미치며 IDS로 인해 시스템에 부하를 크게 함.

2. N-IDS(Network based IDS)

   - 네트워크 기반의 공격을 탐지하여 네트워크 기반 구조를 보호하는 것을 목적으로 함

   - 호스트 기반의 IDS처럼 호스트에 대한 공격을 탐지하거나 상세한 기록을 남길 수는 없으며, 네트워크가 분할되어 있는 경우 

      제 기능을 발휘하지 못하거나 적용 범위가 제한되어 실용성이 없는 경우도 있음

   - NIC를 통해 패킷을 수집하여 수동적인 분석을 하기 때문에 기존 네트워크에 영향을 주지 않고 설치가 편리

 

침입 모델에 따른 분류

1. 비정상적인 침입탐지 기법

   - 감시되는 정보 시스템의 일반적인 행위들에 대한 프로파일을 생성하고 이로부터 벗어나는 행위를 분석하는 기법

     ? 통계적인 자료 근거 : 통계적으로 처리된 과거의 경험 자료를 기준으로 특별한 행위 또는 유사한 사건으로 이탈을 탐지

     ? 특징 추출에 의존 : 경험적인 침입탐지 측정 도구와 침입의 예측 및 분류 가능한 침입도구의 집합으로 구성된 침입 탐지 방법

     ? 예측 가능한 패턴 생성 : 이벤트 간의 상호관계와 순서를 설명하고 각각의 이벤트에 시간을 부여하여 기존에 설정된 

                                           침입 시나리오와 하여 침입을 탐지하는 방법

2. 오용(misuse) 침입탐지 기법

   - 과거의 침입 행위들로부터 얻어진 지식으로부터 이와 유사하거나 동일한 행위를 분석하는 기법

   - 방법이 간단하고 효율적이어서 상용제품에 널리 이용되지만 조금만 변형된 공격에도 Signature가 달라 침입을 

      탐지하지 못하는 경우가 있음

     ? 조건부 확률 이용 : 특정 이벤트가 침입일 확률을 조건부 확률을 이용하여 계산하는 방법

     ? 전문가 시스템 : 축약 감사 사건과 일치하는 사건을 명시하며, 공격 패턴을 탐지하고 이미 설정된 규칙에 따라 처리하는 방법

     ? 상태전이 분석 : 공격패턴을 상태전이의 순서로 표현하며, 초기의 상태에서 최종 상태로의 전이 과정

                               즉 침입과정을 규칙 기반으로 탐지 하는 방법

     ? 키스트로크 관찰 방법 : 사용자의 키스트로크를 감시하여 공격패턴을 나타내는 특정 키 스트로크 순서를 패턴화 하여 침입을 방지

     ? 모델에 근거한 방법 : 공격 패턴을 DB화 하고 특정 공격패턴에 대해 DB를 참조하여 침입 여부를 탐지

 

IDS의 장점

1. 해킹 방법을 기반으로 해커의 침입을 감지 하므로 신기술의 적용이 빠름.

   - 외부로부터의 공격뿐만 아니라 내부자에 의한 해킹도 차단할 수 있으며, 이에따라 기존 방화벽이 지원하지 못하는 ID도용을 통한

      내부 공격자의 해킹도 차단

2. 접속하는 IP에 상관없이 침입을 차단할 수 있음

   - 기존 방화벽은 인증된 IP로의 공격은 막지 못하므로 해커들이 인증된 IP로 공격이 성공하면 방화벽이 무용지물이 되었으나

     IDS는 IP에 상관없이 모든 패킷에 대한 검사를 수행하므로 더욱 안전

3. 시스템 침입에 즉시 대응이 가능

   - 해킹 사실이 발견 되었을 때 해킹에 관한 정보를 휴대전화, 무선호출기, 전자우편 등으로 즉시 전송, 

     네트워크 관리자가 부재시에도 시스템 보안을 유지할 수 있으며, 탐지에 그치지 않고 침투경로까지 추적해 해커를 적발하며, 

     데이터를 안전한 곳으로 전환시켜 놓는 등 방화벽의 수동 적인 대처와는 달리 적극적인 보안 기능을 갖출 수 있음.

 

H-IDS의 장점

1. 정확한 탐지가 가능.

   - 실제로 일어난 이벤트를 포함하는 로그를 사용하므로 보다 정확하다.

2. 시스템 이벤트 감시

   - 사용자와 파일의 접근활동, 파일의 허용의 변화, 새로운 실행 파일을  설치하려는 시도 그리고 특정한 서비스의 접근을 감시

   - 공격자가 어떤 명령을 실행시켰는지, 어떤 파일을 open 시켰는지, 어떤 system call을 실행시켰는지, 어떤 위험한 명령어를 실행시켰는지 

     정확히 관리자에게 통보할 수 있다.

3. N-IDS이 놓치는 공격 탐지

   - 중요한 서버의 터미널로부터의 공격

   - 시스템 내부에서 공격

 4. 암호화 / 스위치 환경에서 적합

   - H-IDS는 중요한 호스트에 직접 탑재되므로 스위치된 환경의 Network와 무관

   - N-IDS는 암호화 통신을 하는 구간에서는 많은 제한을 받을 수 있다.

5. 추가적인 하드웨어 불필요

   - 별도의 시스템이나 네트워크 장비가 추가 요구되지 않음.

 

H-IDS의 단점

1. 특정 기기 또는 기관의 정확한 시스템 구성을 알아야 함

2. 툴의 기능 향상이나 다른 시스템에 적용이 어렵다.

3. 네트워크와 관련된 행위는 분석할 수 없다.

4. 감시자료의 보관 및 처리를 위해 디스크, 처리시간 등의 자원이 필요하다.

5. 운영체제가 취약할 경우 툴의 무결성 모장이 어렵다.

6. 특정 기기에 의존하므로 설치 비용이 많이 든다.

7. 다른 방법에 비하여 유지관리 비용이 많이 든다.

 

N-IDS의 장점

1. 저렴한 투자비용

   - Network traffic을 감시할 수 있는 전략적인 위치에만 설치(효과적인 침입탐지 가능)

   - 다양한 호스트를 관리하는 SW필요 없음

2. H-IDS이 놓치는 공격 탐지

   - H-IDS는 모든 패킷의 헤더를 볼 수 없으므로 모든 종류의 공격을 탐지할 수 없다.(TearDrop, IP 기반의 DOS공격)

   - Payload를 검사 함으로써 특별한 공격에 사용되는 Command 와 Syntax를 찾아냄

3. 공격 흔적 제거의 난이

   - Network traffic을 이용하므로 공격자는 흔적을 제거할 수 없다.

   - Capture 된 데이터는 공격의 방법 뿐 아니라 사후 조사에 사용될 많은 정보를 포함하고 있다.

4. 실시간 탐지와 대응

   - TCP Dos 동격을 당하는 시스템이 감지되면 곧바로 TCP reset으로 공격을 중지

   - H-IDS는 공격을 인식 못하기 때문에 공격 행위가 실행된 후에 조치를 취한다.

5. 실패한 공격의 탐지

   - N-IDS를 방화벽 앞단에 설치하면 방화벽이 차단하는 공격도 탐지할 수 있다.

6. 운영체제 독립적

 

N-IDS 단점

1. 특정 기기 내에서 이루어지는 명령어에 대한 탐지는 불가

2. 통신 내용이 암호화된 경우 침입 탐지 불가

3. 랜 스위치 등으로 네트웍 전체의 내용을 감시하는 것이 어려움

4. 현재의 네트워크 기반 IDS는 초고속 네트워크 검사는 어려움

5. 특정 시스템에 대한 정보가 부족하므로 Host-based 도구보다 부정확한 결과를 얻을 수 있다.

6 네트워크 동작과 성능에 영향을 줄 수 있다.(DoS등의 점검시)

7. 침입을 위한 사전 공격 도구로 사용될 수도 잇따.

IPS(Intrusion Prevention System)란:
IDS에서 한발 나아가 공격이 실제 피해를 주기 전에 미리 능동적으로 공격을 차단함으로써 공격 피해를 최소화할 수 있는 능동적 보안시스템

IDS: 특정 패턴을 기반으로 공격자의 침입을 탐지
IPS: 탐지된 공격을 block하여 적극적인 방어활동

가트너그룹의 정의: "IPS는 방지능력과 빠른 반응속도를 위해 인라인에 위치한 제품, 세션기반 탐지 지원, 다양한 종류의 방지 방법 및 방식(시그니처, 프로토콜 어노멀리, 액션 등)을 통해 악의적인 세션을 차단, 세션 기반 탐지를 지원한다"

    IPS의 효과
  1. 웜과 해킹으로부터 유발되는 네트워크 서비스 장애제거
  2. 유해/불필요한 트래픽을 사전 차단하여 네트워크 비용절감
  3. 공격에 대한 적절한 대응및 사전 방어로 관리비용 절감
  4. OS나 애플리케이션의 취약점을 사전에 보완, 한층 높은 보안제공

    기존 주력 제품라인에 따른 구분
  1. 방화벽 기반의 IPS
    -체크포인트의 ‘인터셉트’, 시큐아이닷컴의 ‘NXG 시리즈’ 쥬니퍼의 "IDP"
  2. IDS 기반의 IPS
    - 엔터라시스의 ‘드래곤 IPS’, 윈스테크넷의 ‘스나이퍼 IPS’, NA의 ‘맥아피 인터루쉴드’, LG엔시스의 ‘세이프존 IPS’
  3. 스위칭 기반의 IPS,
    - 라드웨어 ‘디펜스프로’, 탑레이어 ‘AM IPS 5500’
  4. 바이러스월 기반의 IPS - 포티넷의 ‘포티게이트 시리즈’

    하드웨어 타입에 따른 구분
  1. ASIC 기반 IPS
    -티핑포인트의 ‘유니티원’, NA의 ‘맥아피 인터루쉴드’, LG엔시스의 ‘세이프존 IPS’
  2. 서버 기반 IPS
    - 윈스테크넷의 ‘스나이퍼 IPS’, 정보보호기술의 ‘테스 IPS’,넷스크린의 ‘IDP 시리즈’
  3. 스위치 기반 IPS

    설치구성상의 차이점에 따른 구분
  1. 인라인 IPS
    -보호되어야할 시스템과 그 외의 네트워크 사이에서 L2 브리지처럼 작동하며 모든 트래픽은 브리지 장비와 달리 발견해내도록 취약점 검사를 수행한다- 한국ISS, 넷스크린, 티핑포인트, 윈스테크넷
  2. L7스위치
    -침입차단 및 방어 기능에 로드밸런싱 등으로 트래픽을 효과적으로 조절한다는 측면에서 IDS 기반의 IPS보다 선호하는 고객도 많다. -라드웨어, 탑레이어 ,
  3. 호스트기반
    -IPS,NA의 ‘인터셉트’, 조은시큐리티의 ‘싸이폴로’, 임퍼바의 ‘시큐어스피어’
  4. 하이브리드(Hybrid) 스위치
    -호스트 기반의 IPS와 L7스위치의 특성을 함께 가지고 있으며- 앱실드(Appshild), 카바두(Kavado)


    어떻게 선택할 것인가?
    공격에 따라 적절히 대응하는 보안시스템이라는 유연성 측면에서 고려한다면 IDS 기반과 방화벽 기반, 바이러스월 기반 등의 IPS가 우세할 것이며,
    네트워크 퍼포먼스, 성능 측면을 고려한다면 전용 네트워크 프로세서를 탑재한 제품이나 ASIC 기반과 스위칭 기반의 IPS를 선택하는 것이 좋을 것이다.
    퍼포먼스보다 기능측면을 고려하는 소호 등의 소규모사이트라면 방화벽+IDS 등 별도의 부가기능이 추가된 통합적인 형태의 IPS를 구입하는 것도 좋은 대안이다.

    업계의 한 전문가는 “고객들은 자사 네트워크에 맞게 성능의 가이드라인을 세우고 이에 맞는 제품을 선택해야한다”며 “우리 네트워크에서의 문제는 무엇인지, 웜·바이러스 등에 의한 문제가 가장 심각한지, 네트워크 가용성이 중요해 퍼포먼스를 우선해야 하는지 등을 따져보고 이미 기투자된 장비와의 연동성 등도 고려해 선택하는 것이 좋다”고 조언했다.

    하지만 관련 전문가들은 IPS의 기준이 모호하고 다양한 분류에 대한 이견이 분분한 것에 대해 아직 IPS 시장이 본격 형성되지 않았고 선두 업체가 정해지지도 않았기 때문이라고 분석한다. 상반기를 지나 하반기쯤이면 IPS의 대형 레퍼런스가 탄생할 것이고 이를 선점하는 선두업체의 IPS 제품이 IPS의 모델로 시장에서 자연스럽게 자리잡혀 갈 것이라는 전망이다. 따라서 IPS 시장의 진입 초기인 현재의 복잡한 IPS 제품에 대한 분류는 올 하반기를 지나 내년경이면 정리되어 갈 것으로 예측된다.

    한편 관련 전문가들은 사용자들이 IPS를 선정하는 기준으로 최근 가장 중요시하는 것은 웜 차단 기능과 퍼포먼스라고 전한다. 웜이 워낙 기승을 부려 웜에 대한 효과적인 차단기능이 필요해 IPS를 고려하는 경우가 많기 때문이다. 그리고 IPS가 네트워크단에 설치되기 때문에 가용성을 우선해 기가비트급 이상의 성능이 지원되는 ASIC이나 네트워크 프로세서 기반의 IPS 등을 선호한다는 것.

    IPS는 패킷을 바이패스로 미러링해 침입을 탐지하는 IDS와 달리 네트워크의 패킷이 지나가는 길에 설치한다는 특성으로 인해 퍼포먼스가 고객의 최대 관심사가 되고 있다.

    따라서 현재 출시되는 대부분의 IPS들이 기가급을 지원하고 있다. 최소 1Gbps 이상의 속도를 지원하며 올해부터 본격 구현되고 있는 10기가비트 네트워크를 겨냥해 10기가 이상의 속도를 낼 수 있는 IPS를 출시했거나 준비중도 업체들이 많다. 하지만 웜 차단이 IPS 기능의 전부가 아니고 웜이외에도 다양하게 발생할 수 있는 유해 트래픽과 관련된 IPS의 기능들을 눈여겨 봐야하며 피크타임시의 네트워크 대역폭이 최대 500Mbps 정도의 소규모 고객이 기가급 IPS만을 고집하는 것은 과투자가 될 수 있다. 따라서 자사의 네트워크를 잘 살펴보고 이에 맞는 제품을 고르는 지혜가 우선돼야 한다고 관련 전문가들은 지적하고 있다.

    그러나 IPS의 필요성을 느끼는 가장 큰 부분이 바로 웜 차단이며, 전체 네트워크 환경을 고려해 기가급의 IPS를 선호하는 추세는 당분간 이어질 것으로 보인다. 실제로 관련 전문가들은 “현재 웬만한 대학이나 금융, 기업 등에서 기가급 이하의 네트워크를 찾아보기 힘들다”며 “어렵게 기가급 이상의 네트워크를 구축해놓고 저속의 IPS를 네트워크상에 설치해 전체 네트워크의 성능을 떨어뜨리고 싶어하는 고객은 없다. 방화벽도 이런 이유에서 기가로 올라가는 추세”라고 언급한다.



    차세대 IPS에 필요한 10가지 조건

    1. 고도의 정확성
    - 모든 네트워크 트래픽에 대한 완벽하며 철저한 프로토콜 분석
    - 레이어 3에서 레이어 7까지 전방위적인 상태유지(Stateful) 프로토콜 분석
    - 알려진 익스플로잇(exploit)을 정확히 탐지할 수 있는 컨텍스트 기반 다중 트리거, 다중패턴 시그너처(signature) 매치

    2. 단순한 탐지가 아닌 방지
    - 인라인 운영: 공격을 실시간 탐지, 차단하려면 인라인 IPS가 센서를 데이터 트래픽 경로에 위치시켜 모든 패킷을 처리해야한다.
    - 신뢰성 및 가용성 유지: 인라인 IPS의 경우 가동시간이 매우 중요해 안정적 IPS 센서가 필요하다.
    - 고성능 제공: IPS에는 반드시 인라인 탐지 및 방지를 할 수 있는 처리능력, 예를 들면 패킷 지연시간은 1/1000초 이하로 최소화 되야 한다
    - 세밀한 정책적용: IPS는 세밀한 정책설정으로 악의적 트래픽을 차단할지 결정해야한다

    3. 광범위한 공격방지 적용
    현재 또는 앞으로 나타날 모든 공격을 단 하나만으로 막아주는 마법같은 방지는 없다. IPS는 반드시 시그니처 탐지, 이상탐지 및 DoS 탐지 등을 이용, 광범위한 방어범위를 제공해야한다.

    4. 관련된 모든 트래픽 분석
    IPS에는 반드시 광범위한 데이터 캡처 모드를 사용할 수 있는 능력이 있어 탐지 및 방지용으로 모든 관련 트래픽에 액세스할 수 있어야한다.

    5. 고도의 세밀한 탐지 및 대응
    IPS는 특정 호스트에 대한 특정공격을 탐지할 수 있으며 이에 대한 대응책이 시행되도록 해야한다. 세밀성은 보안정책의 실행과 통제에 반드시 필요한 조건이다.

    6. 유연한 정책관리
    오늘날의 엔터프라이즈 네트워크에서 단일 정책은 쓸모가 없다. 세밀한 정책관리를 통해 트래픽을 논리적 그룹으로 나누고 특정공격에 대한 알맞은 대응을 수행해야 한다.

    7. 확장 가능한 위험관리
    IPS는 부하가 많은 상황에도 대응할 수 있는 확장성을 갖춤으로 모니터링할 트래픽, 경고 처리율의 증가를 지원할 수 있어야한다.

    8. 고도의 사후조사 및 보고
    데이터 퓨전에 기반한 강력한 포렌직(사후 조사) 관리는 사고 분석 및 관리를 지원하는데 필요한 인프라를 제공하며 모든 IPS의 필수 요소이다.

    9. 최대 센서 가동시간
    IPS의 가동시간은 안정적인 실시간 탐지 및 방지를 보장하기 위해 신뢰도 높은 센서 등으로 방화벽, 교환기, 라우터 등 보안 및 네트워크 장치와 비슷해야 한다.

    10. ‘와이어 스피드’ 센서 성능
    IPS는 복잡한 네트워크 패킷과 플로우를 검사하는 시스템으로 최고 처리 용량의 방화벽보다 몇 배 이상의 처리 능력을 갖추고 있어야 한다
 
 
 
 
 
==========================================================================================
 
 
IPS 이용사례
 
 
 
지난해부터 붐이 일어난 IPS는 이제 IDS냐 IPS의 논란 단계를 넘어 고객 사이트에 속속 구현되며 그 기능을 뽐내고 있다. IPS는 네트워크 구성을 변형시키지 않는 인라인 모드로 네트워크에 구현돼 유해 트래픽을 차단하는 것은 물론 이를 통해 네트워크의 안전성과 속도를 높여준다.

그러나 아직도 IPS가 과연 우리 네트워크에서 어떤 식으로 구현될 수 있는지, IPS를 구현하면 어떤 효과를 얻을 수 있는지 의문을 가진 고객들이 더 많을 것이다. 여기서는 IPS의 국내 실제 운영사례를 중심으로 IPS가 어떤 식으로 구현될 수 있으며 어떤 장점을 줄 수 있는지 알아본다.


Case Study 1. 광주시청

네트워크에서 발생 가능한 모든 위협 ‘걱정없다’

광주시청은 전산상으로 2개의 구역을 분리해 체계적인 정보관리를 하고 있어, 보안정책, 보안시스템 구축 시에도 각기 다른 방향으로 접근하고 있다. 2개 분리 구역은 광주시청의 내부 핵심 구간인 B구간과 읍·면·동 사업소, 남한산성, 보건지소 등 광주시청 관할 사업소를 연결하는 A구간이다.

이에 따라 A, B 각 구간과 인터넷 및 경기도청 행정망을 연결하는 구역에 각각 윈스테크넷의 스나이퍼 IPS를 구축해 자체 구조에 적합한 보안정책 설정과 IPS를 통한 능동적 대응으로 보안성을 강화하게 됐다.

광주시청 IPS 네트워크 구성도



네트워크 성능 저하 없이 보안정책 적용

광주시청은 당시 IPS의 필요성은 인지하고 있었지만, 구축 후 망구조의 변화와 트래픽 성능 저하를 우려했다. 이에 윈스테크넷은 기존 네트워크의 라우터와 스위치 사이에 IPS를 설치하는 물리적 망구성과 패킷 우회경로 지정기능을 적용한 논리적 망구성을 병행해 광주시청 네트워크 특성에 효과적인 보안정책을 제시했다.

설치 시, IPS를 경유하도록 연결을 재구성하는 것 이외에 어떠한 물리적인 변경도 하지 않아, 공공기관으로서의 업무 연속성을 유지하면서도 적극적인 보안정책 설정이 가능해졌다.

또한 감시, 차단 대상 네트워크에 어떠한 패킷도 발생시키지 않고, 스나이퍼 IPS를 통과한 정상 패킷에 대해서는 맥 어드레스를 포함한 변경도 일으키지 않음으로써 신규 시스템 설치로 인한 네트워크 정상작동 방해 가능성을 제거했다. 또 IPS의 FOD(Fail Over Device) 기능을 적용해 네트워크 단절을 복구, 네트워크의 안정성을 높였다.


Case Study 2. 한미은행

외부 유해 트래픽 완전 차단으로 고객 보호 ‘이상 무’

한미은행은 외부에서 발생되어 금융권으로 들어오는 각종 웜 바이러스와 악의적인 공격에 대해 방어하고 내부에서 발생되는 유해 트래픽을 감지, 차단 조치하고자 IPS 구축사업을 진행, ‘라드웨어의 애플리케이션 스위치(ASⅢ)’ 도입을 결정했다.

IPS 오작동시에도 네트워크 영향 無

AS III는 네트워크 상에서 일어나는 어떠한 형태의 IP나 웹서비스 애플리케이션에 대해 멀티 기가비트 속도의 보안성을 제공하는 다기능 장비로써 포괄적인 트래픽 전달과 실시간 침입방지 및 멀티 기가비트 속도의 DoS/DDoS 공격 차단기능 등을 제공한다.

이를 활용해 한미은행은 AS III의 구축이 완료되면, 외부로부터 유입되는 유해 트래픽을 완벽히 차단해 고객 및 내부 사용자 보호에 만전을 기할 수 있을 것으로 기대하고 있다.

한미은행 IPS 네트워크 구성도



자동업데이트로 최적 보안상태 유지

한미은행의 IPS 구축사업은 현재 진행중이지만 구축이 완료되면 각종 서버와 라우터 등의 내부자원에 대한 방어 및 차단은 물론이고 내부정보 유출 차단, 내부 유해트래픽 자동 감지로 네트워크를 원천적으로 보호할 수 있게 된다. 또 새로운 바이러스 패턴에 대한 자동 업데이트로 항상 최적의 보안상태를 유지할 수 있으며 보고서 분석으로 유해트래픽의 통계적 관리가 가능하다.


Case Study 3. 구리시청

시정 기밀정보·시민 신상 중요정보 해킹 걱정 ‘끝’

구리시청과 같은 지방자치단체는 상위 관청의 통합 전산망의 일부로 자체 규모는 작으나, 하위에 크고 작은 기관을 관리하고 있어 자체적인 보안관리가 중요해짐에 따라 IPS를 도입하게 됐다.

각 동·출장소 등에서 발생되는 유해 트래픽 차단

구리시청은 시정에 관련된 기밀정보, 시민 개개인의 신상에 관한 중요정보를 보관하고 타 관공서간에 중요한 자료들이 네트워크 상에서 교환되는 등 철저한 보안이 시급한 상황이었다. 또한 각동 출장소 등에서 발생되는 불법적이고 치명적인 유해 트래픽 역시 증가하고 있어 이에 대한 대비책도 시급했다.

이를 시정하기 위해 구리시청은 센타비전의 ‘랩투스 ICS’를 도입, 유해트래픽에 의한 대민서비스 장애를 예방하며 시민정보에 대한 안정성을 높였다.

구리시청 IPS 네트워크 구성도



불필요한 네트워크 트래픽 해소

구리시청은 IPS 도입의 가장 큰 효과로 내부정보 유출을 원천적·능동적으로 차단할 수 있는 점을 꼽는다. 또 불필요하게 네트워크 자원을 소모시키는 트래픽을 해소하고 세션상태 실시간 체크, 차단, 탐지정보, 네트워크 자원 소모량, 트래픽 원인 파악 등의 리포팅으로 네트워크상의 문제점을 제거하고 보다 빠르게 안전한 대민서비스를 개시할 수 있어 만족하고 있다.


Case Study 4. 숭실대

통합보안제품으로 보안 걱정 한방에 ‘끝’

숭실대 전산원은 바이러스, 웜, 트로이 목마 등의 공격으로 인한 트래픽 부하로 하루에도 2∼3번씩 네트워크 다운에 시달렸다. 컴퓨터 실습실은 많은 학생들이 공통으로 사용하다 보니 설치해놓은 백신 소프트웨어를 임의대로 삭제해 바이러스나 웜에 무방비 상태로 노출되기 일쑤였다.

웜·트래픽 공격으로 인한 네트워크 다운 ‘NO’

또, 지적 호기심이 강한 일부 학생들은 바이러스나 웜을 만들어 유포하기도 하고, 내부 서버 해킹을 시도하는 등 보안상의 다양한 문제가 나타나 이를 해결하기 위해 각각의 모듈이 하나의 기본 엔진에 통합된 하드웨어 일체형 통합 보안 제품 ‘포티게이트-500’을 도입했다. 전산원은 포티게이트-500의 기능 중 바이러스월, IPS, QoS, 방화벽 기능만을 사용하고 있다. 방화벽은 30개의 정책을 적용해 수문장 역할을, IPS는 해킹 트래픽 탐지 및 웜 트래픽 차단 역할을 한다.

숭실대 IPS 네트워크 구성도



악성코드 공격에도 네트워크 안전

숭실대 전산원은 포티게이트는 웜, 바이러스에 의한 유발 트래픽을 자동 차단해주고, QoS 기능이 있어 실습실별로 가상랜을 나누어 각각의 인터넷 대역폭을 적용해 네트워크의 안정성을 보장해주는 점이 만족스러웠다고 말했다.

숭실대 전산원은 포티게이트-500을 설치한 이후 단 한 번도 웜이나 바이러스에 의해 네트워크가 다운된 적이 없다. 2003년 최고의 악성 코드로 꼽히는 소빅, 두마루의 출현에도 전산원의 네크워크는 안전하게 유지되고 있다.
 
Case Study 5. LG필립스LCD

네트워크 중단에 의한 업무지연 ‘ IPS ’로 해결

LG필립스LCD는 국내 공장들이 전용선으로 연결되어 있고 전체 인터넷 트래픽이 하나의 관문을 통하여 외부로 나가게 되는 형태로 네트워크가 구성되어 있다. 최상단의 라우터, L4, 이중화 방화벽, L4 순으로 FLB 구성돼 있으며 정상상태에서는 문제없으나 내부에서 웜 트래픽이 유발이 되면 방화벽이 다운되는 문제가 빈번하게 발생했다.

웜 바이러스로 인한 대응방안 부재

또한 내부 바이러스 방역시스템으로 해외 및 외국업체의 백신을 사용하고 있었으나 국외 영업법인과의 연계 때문에 외국의 최신 웜이 국내망으로 유입되거나 특정 웜에 의한 스푸핑이 발생하면 네트워크 레벨에서 적절한 대응 방법을 찾을 수 없어 고심하고 있는 상황이었다. 따라서 LG필립스LCD는 내부/외부에서 발생되는 웜 트래픽에 효과적으로 지속적인 네트워크 서비스가 가능하도록 IPS 도입을 결정했다.

LG필립스LCD IPS 네트워크 구성도



네트워크 전방위에서 능동적 방어 가능

LG필립스는 IPS 설치 위치는 가장 큰 피해를 입고 있는 방화벽 구간으로 결정하고 방화벽 부하를 효과적으로 차단할 수 있는 위치, 즉 내부 L4 스위치 밑에 위치시켜 내부 → 외부로 나가는 웜트래픽 및 IP가 변조된 스푸핑 패킷을 차단시킴으로써 방화벽 구간의 문제점을 해결했고 또한 최근 많이 퍼지는 e메일 관련 웜들에 대한 시그너처를 다수 반영시켜 외부->내부로 유입되는 웜들을 차단토록 설정하여 웜의 확산을 네트워크 전방에서 능동적으로 방어토록 구성했다. IPS 설치 후 LG필립스LCD는 잦은 네트워크 중단으로 인한 업무 지연 때문에 발생할 수 있는 악영향을 IPS 도입을 통하여 제거하고 안정적 네트워크 서비스 제공을 통한 내부 고객 만족도가 향상됐다.


Case Study 6. 한국전산원

초고속국가망 안정성·서비스 질 대폭 향상

한국전산원의 KIX(Korea Internet eXchange)망은 국내 ISP간, 해외 인터넷 연결을 위한 서비스망이기 때문에 신속한 트래픽 소통을 위한 최소한의 보안정책만이 적용돼 있었다. 그러나 전산원은 최근 방화벽 기반의 IPS 시스템인 시큐어닷컴의 ‘NXG4000’을 적용해 국내 인터넷 관문에서 갈수록 고도화되어지는 악성 공격 및 유해 트래픽을 사전에 차단키로 했다.

기 설치된 IDS와 연동으로 ROI 개선

우선 전산원은 IPS 설치로 전체 트래픽(900M~1.2G)의 5~6%정도의 유해 트래픽을 차단, 인터넷 관문에서 정상 트래픽에 섞여 들어오는 유해 트래픽을 차단하여 불필요한 대역폭 낭비 제거했다. 또 기 설치된 정보보호 기술의 ‘테스 IDS’ 시스템과 연동하여 인라인 및 오프라인 장비의 장, 단점을 최대한 활용하는 효율적인 방어 체계 구축, 기존 인프라의 활용도 제고 및 투자보호를 통한 ROI를 개선했다.

한국전산원 IPS 네트워크 구성도



효율적 보안 정책 수립 가능

또 차단된 유해 트래픽을 방화벽의 보안 정책에 의한 것과 IAP(Intrusion Alert Protocol)를 이용한 IDS에 의한 것으로 분리하여 분석할 수 있어 명확하고 효율적인 보안 정책 수립이 가능해졌으며 상시 트래픽 모니터링을 통한 베이스라인 설정으로 갑작스런 유해 트래픽의 발생시에도 차단 정책을 통해 지속적인 서비스가 가능, 서비스의 질을 더욱 향상시킬 수 있게 됐다.


Case Study 7. S통신사

해커로부터 안전한 고객 요금 관리 서비스 유지 가능

S통신사의 네트워크는 전체 통신사의 수입을 관장하는 고객 요금에 관련된 네트워크로서 매우 중요한 자산이다. 평소에 웜의 다량 유입시 네트워크가 불안정했으며, 해커가 항상 목표로 할 수 있는 네트워크로 관리자들의 주의가 필요한 네트워크다.

네트워크 가용성 향상·안정화 달성

따라서 네트워크의 다운이나 지연은 통신사 자체의 매출에 바로 타격을 줄 수 있으며, 고객을 계속해서 유지하기가 힘든 상황이라 S통신사는 탑레이어의 ‘IPS 2000’를 도입, 유해트래픽으로 인한 네트워크 다운을 방지하기로 결정했다.

탑레이어의 IPS 2000은 다량으로 유입되던 웜이 없어짐으로써 네트워크의 가용성이 높아지고 해커로부터의 침입 위험성이 낮아지므로서 완벽한 고객 요금 관리 서비스를 유지할 수 있었다. 또한 비대칭 구조의 네트워크에서 발생할 수 있는 오탐 및 미탐을 제거함으로써 안전한 네트워크 운영이 가능케 됐다.

S통신사 IPS 네트워크 구성도



이중화 네트워크에도 IPS 구현

또한 탑레이어는 이중화 네트워크에 IPS가 도입된 사례가 거의 없는데 반해 S통신사의 이중화 네트워크에 IPS를 설치했다. 이로써 HA 구성으로 따로 IPS를 구성할 경우 발생할 수 있는 오탐과 미탐을 방지, 보다 안전하고 효율적인 IPS를 운영할 수 있게 됐다.

S통신사는 향후 타 네트워크 구간에도 IPS를 도입 예정이며, IPS를 이용하여 네트워크 사용 형태를 분석해 사내 네트워크 건전성을 높이는 데 활용할 예정이다.

 

전용선/ VPN 전용선/ 인터넷 전화/ 멀티PC/ NDAS - '소프트마트' : http://www.soft-mart.co.kr

'scrap' 카테고리의 다른 글

XP 네트워크 명령어  (0) 2010.04.18
IDS  (0) 2010.03.27
IPS  (0) 2010.03.27
[안철수연구소 칼럼] 바이러스 및 악성코드와 백신의 미래  (0) 2010.03.19
[안랩] 파일 기반의 탐지기법  (0) 2010.03.19
IPS란

지난해 발표된 가트너 그룹 보고서에 따르면 1세대 네트워크 IDS 제품은 탐지 성능에 문제가 있어서 신뢰할 수 있는 네트워크에 제한된 소수의 센서만을 설치 가능한 것으로 나타났다. 뿐만 아니라 IDS는 잘못된 탐지 경보를 남발하는 문제가 있어 진짜 공격을 놓칠 위험을 감수하면서도 상당한 자원을 오경보 추적에 소모하게 됨으로써 이미 제한된 보안 인원과 인프라에 심각한 영향을 줄 수밖에 없었다.

고도의 탐지 방법과 공격을 방지할 수 있는 기능이 없는 1세대 IDS는 충분한 성능 지원 없이 단지 보안에 대한 환상만을 제공한다는 점에서 그저 디지털 마지노선에 지나지 않는다. 이에 따라 등장한 것이 바로 침입방지 시스템 ‘IPS’이다.

IPS는 IDS에서 한발 나아가 공격이 실제 피해를 주기 전에 미리 능동적으로 공격을 차단함으로써 공격 피해를 최소화할 수 있는 능동적 보안대책이라는 점이 가장 큰 장점이다. IPS는 OS나 애플리케이션의 취약점을 능동적으로 사전에 보완하고 웜이나 버퍼오버플로우, 특히 비정상적인(Ano-maly) 트래픽이나 알려지지 않은 공격까지 차단할 수 있기 때문에 한층 높은 보안을 제공해준다.

또 IPS의 가장 큰 특징은 기업 외부에서 내부 네트워크로의 침입을 방지하는 것이다. IPS의 도입을 원하는 대부분의 기업들 목표 역시 외부 침입방지이며 효과 역시 유해 트래픽의 원천적인 차단이다.

그렇다면 외부 트래픽을 차단하는 방화벽과 역시 외부 침입을 방지하는 IPS는 어떤 차이가 있는 것일까? 기존 보안시스템인 방화벽은 단순 차단 기능, 알려진 공격패턴 감시 등을 통해 공격을 감지하지만, 님다나 코드레드같은 새로운 공격을 막기에는 역부족이다. IDS 또한 알려지지 않은 공격에 대한 탐지가 곤란하고 내부 공격자를 막기에도 어려움이 있다. 침입탐지의 오판에 따른 시간, 인적, 재정 낭비도 문제점으로 지적된다. 이에 반해 IPS는 알려지지 않은 공격에 대해서 적절하게 대응을 하며 명백한 공격은 사전 방어를 취한다. 또 웜과 바이러스 등의 침입을 네트워크단에서 차단시킴으로 보안 인프라와 네트워크 영향을 제거하며 공격에 대한 사후 조사로 인해 소요되는 관리자 운영 부담을 없애주는 장점이 있다.

이처럼 IPS는 웜 바이러스와 해킹으로부터 유발되는 네트워크 서비스 장애로부터 벗어날 수 있고 부가적으로 유해한 트래픽을 사전 차단함으로써 인터넷 및 네트워크 자원의 효율적 사용을 통한 비용절감을 도모할 수 있다.

하지만 이런 장점에도 불구하고 현재 어떤 기능들을 갖추고 있어야 IPS라고 부를 수 있는가에 대한 기준은 상당히 모호하다.

일선 영업담당자들은 “IPS 제품선정을 위해 BMT를 실시한다는 공고가 뜨면 IPS 전용장비는 물론이고 IDS에 드롭(Drop) 기능을 추가한 제품, L7스위치, 바이러스월 등 각종 장비가 모여든다”며 “최소한 바이러스월과 IPS는 구분된다거나 L7스위치와 IPS의 경계를 지어주는 등 기준이 필요할 것”이라고 언급하고 있다. 즉 IPS의 웜, 바이러스 차단, 네트워크 트래픽 조절 등의 기능으로 인해 바이러스월도 L7스위치도, IDS도 모두 약간의 기능을 추가하면 IPS라고 부를 수 있는 제품으로 둔갑한다는 것이다.


자사 상황 고려 필수

이처럼 현재 출시된 IPS들은 그 출신성분, IPS라는 이름을 달고 내놓은 제품 이전 제품은 어떤 것을 보유하고 있었느냐에 따라 방화벽 기반의 IPS, IDS 기반의 IPS, 스위칭 기반의 IPS, 바이러스월 기반의 IPS 등으로 나눌 수 있다. 또 전용 ASIC 기반, 네트워크 프로세서를 탑재했느냐에 따라 ASIC 기반 IPS, PC 서버 등 서버에 올렸느냐에 따라 서버 기반 IPS, 스위치 기반 IPS 등 하드웨어 타입에 따라 나누기도 한다. 여기서 또 기능상의 분류로 들어가 세션 기반, 패킷 기반, 그리고 스위칭 기반이냐 등으로 분류될 수도 있다.

IDS 기반의 IPS로는 엔터라시스의 ‘드래곤 IPS’, 윈스테크넷의 ‘스나이퍼 IPS’, NA의 ‘맥아피 인터루쉴드’, LG엔시스의 ‘세이프존 IPS’ 등이 속한다. 또 방화벽 기반의 IPS로는 체크포인트의 ‘인터셉트’, 시큐아이닷컴의 ‘NXG 시리즈’ 등이며, 스위칭 기반의 IPS로는 라드웨어 ‘디펜스프로’, 탑레이어 ‘AM IPS 5500’ 등, 바이러스월 기반으로는 포티넷의 ‘포티게이트 시리즈’ 등이 속한다. 한편 전용 ASIC 기반 네트워크 프로세서가 탑재된 제품으로는 티핑포인트의 ‘유니티원’, NA의 ‘맥아피 인터루쉴드’, LG엔시스의 ‘세이프존 IPS’ 등이며, 서버 기반으로는 S/W 형태로 출시돼 별도의 서버에 탑재해야하는 윈스테크넷의 ‘스나이퍼 IPS’, 정보보호기술의 ‘테스 IPS’, 넷스크린의 ‘IDP 시리즈’ 등이다.

혹자는 IPS를 세션 기반이냐 패킷 기반이냐 나누고 세션 기반이 패킷 기반보다 시그니처 분석 등으로 세심한 공격탐지가 가능하다는 식의 주장을 하기도 하지만 이런 분류는 별로 의미가 없다는 것이 전문가들의 주장이다. IPS는 네트워크상에 위치하는 제품인 만큼 세션과 패킷을 동시에 처리해야 하며 대부분의 제품들이 세션과 패킷을 혼용해서 출시돼 있어 세션이나 패킷이냐의 분류는 잘 쓰지 않는다.

한편 IPS의 설치구성상의 차이점과 기능에 따라 인라인 IPS, L7스위치, 호스트기반 IPS, 하이브리드(Hybrid) 스위치 등으로 구분하기도 하는데 인라인 IPS는 보호되어야할 시스템과 그 외의 네트워크 사이에서 L2 브리지처럼 작동하며 모든 트래픽은 브리지 장비와 달리 발견해내도록 취약점 검사를 수행한다. 현재 통용되고 있는 한국ISS, 넷스크린, 티핑포인트, 윈스테크넷 등 국내외 업체들의 IPS 제품들이 대부분 여기에 속한다. 또 L7스위치는 지난 1.25대란을 겪으며 일부 기업과 통신사 등에 공급, 효과적으로 웜 바이러스를 차단할 수 있다는 입소문을 타고 침입차단의 강자로 부상했다.

유독 국내에서는 L7스위치가 IPS 제품으로 통용되고 있는데 침입차단 및 방어 기능에 로드밸런싱 등으로 트래픽을 효과적으로 조절한다는 측면에서 IDS 기반의 IPS보다 선호하는 고객도 많다. 대표적으로 라드웨어, 탑레이어 등 L7스위치 기반의 IPS가 여기에 속한다. 또 보호를 필요로 하는 각 서버에 탑재돼 보안기능을 발휘하며 시큐어 OS와 비슷한 기능을 수행하는 호스트기반 IPS는 NA의 ‘인터셉트’, 조은시큐리티의 ‘싸이폴로’, 임퍼바의 ‘시큐어스피어’ 등이 속한다. 하이브리드 스위치는 호스트 기반의 IPS와 L7스위치의 특성을 함께 가지고 있으며 대개 하드웨어 기반으로 L7스위치처럼 서버의 앞단에 위치한다.

하지만 하이브리드 스위치는 일반적으로 네트워크 IPS 타입의 룰셋보다 호스트 기반의 IPS와 비슷한 정책을 사용하며 여기에 속하는 제품은 앱실드(Appshild), 카바두(Kavado) 등에서 취급한다.

이처럼 많은 분류들이 상존하고 있으나 이런 분류들은 각각의 장단점이 존재하며 이 분류가 절대적 우위를 가리는 판단기준이 되지는 않는다. 공격에 따라 적절히 대응하는 보안시스템이라는 유연성 측면에서 고려한다면 IDS 기반과 방화벽 기반, 바이러스월 기반 등의 IPS가 우세할 것이며, 네트워크 퍼포먼스, 성능 측면을 고려한다면 전용 네트워크 프로세서를 탑재한 제품이나 ASIC 기반과 스위칭 기반의 IPS를 선택하는 것이 좋을 것이다. 퍼포먼스보다 기능측면을 고려하는 소호 등의 소규모사이트라면 방화벽+IDS 등 별도의 부가기능이 추가된 통합적인 형태의 IPS를 구입하는 것도 좋은 대안이다.

업계의 한 전문가는 “고객들은 자사 네트워크에 맞게 성능의 가이드라인을 세우고 이에 맞는 제품을 선택해야한다”며 “우리 네트워크에서의 문제는 무엇인지, 웜·바이러스 등에 의한 문제가 가장 심각한지, 네트워크 가용성이 중요해 퍼포먼스를 우선해야 하는지 등을 따져보고 이미 기투자된 장비와의 연동성 등도 고려해 선택하는 것이 좋다”고 조언했다.

하지만 관련 전문가들은 IPS의 기준이 모호하고 다양한 분류에 대한 이견이 분분한 것에 대해 아직 IPS 시장이 본격 형성되지 않았고 선두 업체가 정해지지도 않았기 때문이라고 분석한다. 상반기를 지나 하반기쯤이면 IPS의 대형 레퍼런스가 탄생할 것이고 이를 선점하는 선두업체의 IPS 제품이 IPS의 모델로 시장에서 자연스럽게 자리잡혀 갈 것이라는 전망이다. 따라서 IPS 시장의 진입 초기인 현재의 복잡한 IPS 제품에 대한 분류는 올 하반기를 지나 내년경이면 정리되어 갈 것으로 예측된다.

한편 관련 전문가들은 사용자들이 IPS를 선정하는 기준으로 최근 가장 중요시하는 것은 웜 차단 기능과 퍼포먼스라고 전한다. 웜이 워낙 기승을 부려 웜에 대한 효과적인 차단기능이 필요해 IPS를 고려하는 경우가 많기 때문이다. 그리고 IPS가 네트워크단에 설치되기 때문에 가용성을 우선해 기가비트급 이상의 성능이 지원되는 ASIC이나 네트워크 프로세서 기반의 IPS 등을 선호한다는 것.

IPS는 패킷을 바이패스로 미러링해 침입을 탐지하는 IDS와 달리 네트워크의 패킷이 지나가는 길에 설치한다는 특성으로 인해 퍼포먼스가 고객의 최대 관심사가 되고 있다.

따라서 현재 출시되는 대부분의 IPS들이 기가급을 지원하고 있다. 최소 1Gbps 이상의 속도를 지원하며 올해부터 본격 구현되고 있는 10기가비트 네트워크를 겨냥해 10기가 이상의 속도를 낼 수 있는 IPS를 출시했거나 준비중도 업체들이 많다. 하지만 웜 차단이 IPS 기능의 전부가 아니고 웜이외에도 다양하게 발생할 수 있는 유해 트래픽과 관련된 IPS의 기능들을 눈여겨 봐야하며 피크타임시의 네트워크 대역폭이 최대 500Mbps 정도의 소규모 고객이 기가급 IPS만을 고집하는 것은 과투자가 될 수 있다. 따라서 자사의 네트워크를 잘 살펴보고 이에 맞는 제품을 고르는 지혜가 우선돼야 한다고 관련 전문가들은 지적하고 있다.

그러나 IPS의 필요성을 느끼는 가장 큰 부분이 바로 웜 차단이며, 전체 네트워크 환경을 고려해 기가급의 IPS를 선호하는 추세는 당분간 이어질 것으로 보인다. 실제로 관련 전문가들은 “현재 웬만한 대학이나 금융, 기업 등에서 기가급 이하의 네트워크를 찾아보기 힘들다”며 “어렵게 기가급 이상의 네트워크를 구축해놓고 저속의 IPS를 네트워크상에 설치해 전체 네트워크의 성능을 떨어뜨리고 싶어하는 고객은 없다. 방화벽도 이런 이유에서 기가로 올라가는 추세”라고 언급한다.

차세대 IPS에 필요한 10가지 조건

1. 고도의 정확성
- 모든 네트워크 트래픽에 대한 완벽하며 철저한 프로토콜 분석
- 레이어 3에서 레이어 7까지 전방위적인 상태유지(Stateful) 프로토콜 분석
- 알려진 익스플로잇(exploit)을 정확히 탐지할 수 있는 컨텍스트 기반 다중 트리거, 다중패턴 시그너처(signature) 매치

2. 단순한 탐지가 아닌 방지
- 인라인 운영: 공격을 실시간 탐지, 차단하려면 인라인 IPS가 센서를 데이터 트래픽 경로에 위치시켜 모든 패킷을 처리해야한다.
- 신뢰성 및 가용성 유지: 인라인 IPS의 경우 가동시간이 매우 중요해 안정적 IPS 센서가 필요하다.
- 고성능 제공: IPS에는 반드시 인라인 탐지 및 방지를 할 수 있는 처리능력, 예를 들면 패킷 지연시간은 1/1000초 이하로 최소화 되야 한다
- 세밀한 정책적용: IPS는 세밀한 정책설정으로 악의적 트래픽을 차단할지 결정해야한다

3. 광범위한 공격방지 적용
현재 또는 앞으로 나타날 모든 공격을 단 하나만으로 막아주는 마법같은 방지는 없다. IPS는 반드시 시그니처 탐지, 이상탐지 및 DoS 탐지 등을 이용, 광범위한 방어범위를 제공해야한다.

4. 관련된 모든 트래픽 분석
IPS에는 반드시 광범위한 데이터 캡처 모드를 사용할 수 있는 능력이 있어 탐지 및 방지용으로 모든 관련 트래픽에 액세스할 수 있어야한다.

5. 고도의 세밀한 탐지 및 대응
IPS는 특정 호스트에 대한 특정공격을 탐지할 수 있으며 이에 대한 대응책이 시행되도록 해야한다. 세밀성은 보안정책의 실행과 통제에 반드시 필요한 조건이다.

6. 유연한 정책관리
오늘날의 엔터프라이즈 네트워크에서 단일 정책은 쓸모가 없다. 세밀한 정책관리를 통해 트래픽을 논리적 그룹으로 나누고 특정공격에 대한 알맞은 대응을 수행해야 한다.

7. 확장 가능한 위험관리
IPS는 부하가 많은 상황에도 대응할 수 있는 확장성을 갖춤으로 모니터링할 트래픽, 경고 처리율의 증가를 지원할 수 있어야한다.

8. 고도의 사후조사 및 보고
데이터 퓨전에 기반한 강력한 포렌직(사후 조사) 관리는 사고 분석 및 관리를 지원하는데 필요한 인프라를 제공하며 모든 IPS의 필수 요소이다.

9. 최대 센서 가동시간
IPS의 가동시간은 안정적인 실시간 탐지 및 방지를 보장하기 위해 신뢰도 높은 센서 등으로 방화벽, 교환기, 라우터 등 보안 및 네트워크 장치와 비슷해야 한다.

10. ‘와이어 스피드’ 센서 성능
IPS는 복잡한 네트워크 패킷과 플로우를 검사하는 시스템으로 최고 처리 용량의 방화벽보다 몇 배 이상의 처리 능력을 갖추고 있어야 한다. 

'scrap' 카테고리의 다른 글

IDS  (0) 2010.03.27
IPS  (0) 2010.03.27
[안철수연구소 칼럼] 바이러스 및 악성코드와 백신의 미래  (0) 2010.03.19
[안랩] 파일 기반의 탐지기법  (0) 2010.03.19
[안랩] 에뮬레이터와 샌드 박스  (0) 2010.03.19

보안 제품의 기능 확장·웹 보안과 결합 지속

컴퓨터를 사용하는 사람들은 누구나 한 번쯤은 바이러스에 걸려서 고생을 하거나 애드웨어 때문에 원하지 않는 광고 창을 닫느라 땀을 흘린 경험을 가지고 있다. 또 스파이웨어는 사용자가 알아차리지 못하게 정보를 빼돌린다. 이러한 악성코드는 나름대로 각각 ‘성격’을 가지고 있다. 이 ‘성격’은 탄생 초기에는 어설펐지만 수많은 운영체제와 사용자 환경을 겪으면서 ‘진화’해 가고 있는 것이다.


단, 스파이웨어는 사용자가 알아차리지 못하게 정보를 빼돌리고 있었으니 눈에 띄는 직접적인 피해나 번거로움은 없었을지도 모르지만, 쇼핑 사이트나 이동통신 사이트의 사용자 정보 유출 뉴스를 듣고 나면 며칠 후부터 메일과 SMS를 통하여 증가하는 스팸과 광고에 짜증내 본 기억도 떠오를 것이다. 


사용자를 불편하게 하고 정보를 빼내려는 이러한 악성코드가 사라진다면 얼마나 좋을까? 하지만 마치 사회에서 도둑이나 강도가 없길 바라지만 사라지지 않듯이, 운영체제를 만드는 마이크로소프트가 ‘신뢰할 수 있는 컴퓨팅’을 내세우며 보안을 강화해 나가더라도 악성코드는 줄어들지 않고 더욱 교묘하고 은밀하게 정보를 빼내가려고 하고 있다. 도둑이나 강도가 없는 세상은 사람들이 모두가 천사가 되는 영화나 소설 속에서나 가능할 것 같다.
 


영화나 소설과 같은 이야기가 나왔으니 이어서 비유를 해보자면 베트맨에 나오는 악역인 조커의 캐릭터처럼 악성코드도 ‘성격’을 가지고 있다. 그리고 이 ‘성격’은 탄생 초기에는 어설펐지만 수많은 운영체제와 사용자 환경을 겪으면서 ‘진화’해 가고 있다. 사실, 운영체제가 점점 더 거대해지고 많은 기능을 제공하면서 악성코드가 가질 수 있는 ‘성격’은 점점 더 다양해지고 있는 현실이다.
 


그렇다면 최근에 등장하는(또는 등장한 걸 모를 수도 있는) 악성코드들은 어떤 ‘성격’을 가지고 있을까? 악성코드의 미래를 이야기하기 전에 이들의 성장과정인 필모그라피(filmography)를 먼저 아는 것이 도움이 될 것이다.


악성코드, 점점 자신을 숨기다

초기의 악성코드들은 순진한 ‘성격’을 가지고 있었다. 바이러스에 감염되면 벽에 낙서를 하듯이 “아무개 여기 다녀가다”라는 식으로 표시를 하거나 프로그램 내부에 특정한 문자열을 심어서 자신의 사인으로 남기기도 했다. 그냥 어디엔가 자신의 이름이 나온다는 것이 재미있는 그런 호기심 많은 사춘기와 같은 시기였을 테니까. 


그렇게 얌전했던 성격은 1990년대 후반에 들어서면서부터 심각하게 삐뚤어지기 시작했는데, 컴퓨터 운영 체제가 도스(DOS)를 사용하던 것에서 윈도우(Windows) 형태로 바뀌면서부터 더 악동 같은 짓을 하게 되었다. 왜냐하면 윈도우 환경은 집에서 혼자 장난감을 가지고 놀다가 동네 놀이터에 나가서 놀게 되는 것처럼 더 넓고, 더 다양하고, 더 많은(사실 이것이 중요하다! 공격할 수 있는 대상이 무지막지하게 늘어났으니!) 환경을 제공해 주었다. 그뿐만 아니라 인터넷의 대중화는 이러한 놀이터를 연결해서 놀이 동산에 입장한 것처럼 사람들을 쉽게 연결할 수 있게 되었고 악성코드를 만들어서 시험해볼 수 있는 좋은 놀이터를 제공하게 되었기 때문이다.
 


그럼 악성코드는 왜 놀이터를 헤집고 다니게 되었을까? 아이러니컬하게도 악성코드를 만들기 쉬워진 것은 GUI(Graphic User Interface)를 제공하는 운영 체제와 Visual C 등으로 편리해진 프로그래밍 덕분이다. 왜냐하면 악성코드도 사용자가 의도하지 않은, 하지만 그 프로그램을 만든 누군가가 원하는 무엇인가를 수행하는 하나의 소프트웨어이기 때문이다.
 


악성코드들이 순진함에서 점점 삐뚤어진 성격을 가지게 되면서 좀 더 강렬하고 자극적이고 치명적인 모습으로 진화해가기 시작했다. 왜냐하면 보안 회사들의 방어 능력도 점점 좋아지고 빨라졌고 운영 체제를 만들던 마이크로소프트도 자사 운영 체제의 취약점을 보완하기 위해서 많은 노력과 투자를 하기 시작했기 때문이다.

쉽게 이야기하면 초기에 지은 집들은 방범이 허술해서 도둑이 쉽게 들어올 수 있었지만, 경비원을 두고 주인이 직접 문을 점검하고 다니니 악성코드들은 문을 열고 들어오기 위해서 더 힘들게 고생을 해야 했다. 마치 영화 ‘미션 임파서블’에서 컴퓨터에 접근하기 위해서 줄을 타고 내려와서 대롱대롱 힘들게 매달려 있어야 했던 것처럼 말이다.


악성코드, 당신의 안방을 노리다

위에서 간단하게 살펴본 것처럼 악성코드들은 점점 지능적으로 변해갔다. 들키지 않고 오래 남아 있어야 하고 사용자 몰래 무엇인가를 해야 하기 때문이다. 더 강화된 방범 시스템을 피하기 위해서 더욱 높은 수준의 변장과 다양한 침투 도구들이 필요하게 되었다. 사용자들도 한 두 번쯤은 악성코드에 당하게 되면서 인식이 높아졌기 때문에 악성코드를 쉽게 만들어서 마구 뿌릴 수 있던 그런 시절은 지나가버렸다. 


무척 힘들게 집에 침입한 도둑이 그냥 벽에 낙서만 하고 돌아설까? 그냥 가기엔 도둑 입장에서 무언가 허전하고 아쉽고 바보 같은 느낌이 든다. 그렇다. 힘들게 집에 들어갔으니 돈이 될만한 무엇인가를 좀 들고 나가야겠다. 사실 악성코드를 만들 수 있는 정도의 수준이면 사용자의 컴퓨터에서 무엇인가를 집어 나가는 것은 어려운 일도 아니다.(만들어진 것을 이용하는 사용자와 그것을 만들어주는 개발자의 차이란 참으로 크지 않던가?)
 


그래서 처음에는 그 집에 있는 돈이 될만한 정보들을 들고 나가기 시작했다. 대표적으로 사용자의 개인 정보를 노리기 시작했고 사용자에게 광고를 보여주고 돈을 벌어보기도 했다. 그 다음에는 사용자의 금융 정보, 그리고 나중에는 사용자의 데이터 파일까지 내보내기 시작했다.(이쯤 되면 악성코드의 성격이 참 많이 빗나가고 있다.)


악성코드, 크게 한 방을 노리다

보안 소프트웨어의 방어 노력과 사용자의 높아진 경각심으로 인하여 악성코드들은 새로운 방법을 모색하기 시작했는데 그것은 바로 눈에 띄지 않게 더 숨어버리는 것이었다. 처음부터 들어가서 노골적으로 무엇인가를 가져가려고 하니 잘 들키게 되어서, 이젠 몰래 들어간 후에, 훗날을 기약하는 원격 조정 폭탄(?)을 조심스럽게 심어놓는 것이다. 


악성코드가 사용자의 PC를 조금씩 조금씩 장악해 나가면서 자신만의 꿈을 키워 나갔는데 그것은 바로 사용자 PC에 심어놓은 원격 조정 폭탄들을 동원하여서 한 탕 크게 하는 것이다. 말하자면 은행강도 정도로 크게 한탕하고 도망가는 것이라고 할까? 힘들게 한 탕을 하려니 개인 사용자 수준의 정보로는 부족하고 기업이나 기관의 큰 데이터베이스를 노리거나, 공격에 대한 예고를 통해 돈을 요구하는 형태로 발전하게 되었다. 지금도 특정 사이트를 공격하는 D-day가 되면, 많은 개인 사용자 PC들이 사용자도 모르게 좀비가 되어서 공격에 동원되는지 알 수 없을 정도이다.
 


여기까지 오게 되면 순진하게 시작되었던 악성코드의 성격은 수많은 좀비를 앞세운 무장강도 수준으로 삐뚤어진 성격이 되어버린 것이라고 할 수 있겠다. 지금은 악성코드들이 사용자의 PC를 원격으로 조정하기 위하여 영화 ‘마이너리티 리포트’에 나오는 작은 스파이 로봇들을 뿌리는 것처럼 작지만 알아차리기 힘든 에이전트들을 몰래 몰래 뿌리고 있는 중이다. 언제, 어느 사이트를 공격할지는 알지 못하는 채로.


악성코드의 유비쿼터스 시대; 언제 어디서나, 보이지 않게

그렇다면 앞으로 시간이 좀 더 흐르고 나면 이러한 악성코드들을 싹 없애버릴 수 있을까? 안타깝게도 대답은 ‘아니다’이다. 오히려 악성코드들이 활약할 수 있는 분야는 더 다양해지고 있다. 사람들이 PC뿐만이 아니라 노트북을 사용하고(사실 노트북은 PC랑 운영 체제 기반과 환경이 거의 같다), 핸드폰, MP3P, PDA, PMP, PDP, 내비게이션 등 무수히 많은 디지털 기기를 사용하고 있다. 


사용자들은 앞으로 더 많은 개인화한 디지털 기기들을 이용하게 될 텐데, 이들은 모두 운영 체제를 가지고 있고 또 그 취약점을 가지고 있다. 하드웨어 제품을 만드는 회사와 종류는 다를지 몰라도 운영 체제는 마이크로소프트가 거의 독과점을 하고 있는 상황에서 악성코드들에게는 더 다양한 놀이터를 제공하는 것일지도 모른다.
 


사실, 개인화한 기기뿐만 아니라 홈 네트워크가 더 많이 보급되고 가정의 가전 제품들도 급속히 네트워크화한다면 냉장고가 악성코드에 감염되어서 문을 열어 주지 않거나, 반찬을 녹여 버리거나, 냉각기를 세워서 냉장고 앞을 흥건하게 적셔놓을지도 모르는 일이다. 디지털 도어 락이 입력을 거부하거나 디지털 텔레비전이 마음대로 온라인 주문을 하지 않을 거라고 제조업체가 보장할 수 있을까?


사용자 삽입 이미지


악성코드와 보안 제품의 가상화

GUI 환경을 통해 사용자들에게 편리한 환경을 제공했듯이(물론 악성코드에게도 편리한 환경), 최근에는 가상화 환경을 통해 시스템을 절약하고 한정된 자원으로 더 많은 일들을 할 수 있도록 해주는 노력들이 이어지고 있다. 가상화를 통해 구현되는 환경은 사용자 입장에서는 큰 차이를 느끼지 못할 수도 있지만, 시스템의 활용성을 더 높이고 돈을 더 많이 들이지 않아도 된다는 점에서 매우 매력적인 환경이 될 것이다. 


그런데 사용자에게 편리한 환경은 악성코드에게도 편리한 환경이 될 수 있다는 점에서 편리함과 보안성은 동전의 양면과 같은 성격을 가지고 있다. 악성코드가 가상화 환경에서 존재한다면 쉽게 폐기할 수 있을 것이라고 생각할 수도 있지만 가상화 환경에 숨어들어가서 더 찾기 힘들고 치료하기 어려워질 수도 있다. 가상화가 점점 실용적으로 이용될수록 우리가 이제까지 경험하지 못한 새로운 악성코드의 패턴이 등장할 것이라 예상할 수 있다. 


그렇다면 사이버 세상의 미래는 헐리우드식 영화들이 보여주는 것처럼 암울하고 비관적이기만 한 것일까? 아니면 아시아권의 영화들이 보여주는 것처럼 인간적이고 자연적인 모습을 기대할 수 있는 것일까?
 


이에 대한 한 가지 답으로 안티바이러스 및 통합보안 제품의 가상화 기술을 제시할 수 있다. 가상화는 이미 1960년대에 시작된, 생각보다 오래 묵은 기술이다. 오래된 만큼 기술적으로 성숙되어 있고 가상화 개념이 적용된 분야 또한 광범위하다. 보안 업계에서도 이미 오래 전부터 화두였다. 가상화 기술을 도입한 서버, 네트워크 등 여러 가지 솔루션의 등장으로 그 취약점 또한 점점 늘고 있다. 가상화 기술을 확보하지 않고서는 이를 위한 보안 제품도 만들 수 없으며 악성코드는 이 점을 노릴 것이다. 이에 대비하기 위해 안철수연구소를 비롯한 보안 업체는 어느 때보다 기술 확보에 노력하고 있다. 


안티바이러스 분야에서 현재 가장 많이 적용된 가상화 기술은 에뮬레이티드 머신(Emulated Machine) 또는 샌드박스 머신(Sandbox Machine)을 이용한 악성코드 분석 기법이다. 이것들은 각각 나름의 가상화 방법을 가지고 구현되어 있다. 또한 이를 통한 자동 분석 시스템 또한 각광을 받고 있다. 엄청나게 폭주하고 있는 악성코드 샘플을 효과적으로 처리하고 늘어만 가는 악성코드를 효과적으로 처리하기 위해 가상화 기술에서 방법을 찾고 있다. 


현재 안철수연구소는 악성코드 샘플 처리 자동화 시스템에 Light-weight Virtualized Environment 기술을 적용하고 있다. 이 기술은 엔진의 진단율을 높이는 데도 적용하고 있다. 또한 제너릭 디텍션(Generic Detection), 휴리스틱 디텍션(Heuristic Detection), 프로액티브 프리벤션(Proactive Prevention) 등의 기법을 테스트하고 있다. 이런 기술로 악성코드에 더 효과적으로 대응할 수 있으며 더 많은 악성코드를 차단할 수 있다.


통합보안 제품, 더 가볍고 더 빨라지다

한편, 백신 및 통합보안 제품의 변화 추세를 보자면 급변하는 인터넷 환경과 고객의 요구에 대응하며 포인트 솔루션에서 토털 솔루션으로, 다시 웹 2.0 기술을 접목한 서비스 형태로 지속적인 진화를 하고 있다. 단순 안티바이러스 툴을 넘어 사용자의 PC 사용을 더욱 안전하고 편하게 하는 방향으로 변화를 거듭하고 있는 것이다. 특히 최근 통합보안 제품의 변화를 주도하는 방향은 크게 ‘경량화와 가속화’, ‘케어 영역의 확대’로 나누어볼 수 있다. 


인터넷의 급속한 성장과, PC와 PC가 네트워킹된 상황에서 악성코드의 유포 채널이 미디어를 통한 수동적인 방법에서 사이트를 통한 능동적인 방향으로 바뀌어 가고 있다. 그에 따라 악성코드가 기하급수적으로 늘어나고 있다. 이에 대한 대응으로 통합보안 제품이 진단하는 악성코드 DB도 1년에 2배 정도씩 늘어나고 있다.  


최근 PC를 사용하는 주된 목적은 인터넷 쇼핑이나 뱅킹, 동영상, 게임 등 금융과 엔터테인먼트로 집중되고 있다. 이에 따라 운영체제나 타 프로그램 때문에 PC 작동이 끊기거나 지연되는 일이 없기를 바라는 요구가 증가하고 있다.
 

이와 같이 PC 사용의 목적 및 패턴이 변화함에 따라 통합보안 제품에 대한 요구가 기능 중심에서 PC 사용에 미치는 영향을 최소화하는 경량화로 이동하고 있다. 악성코드가 증가함에 따라 통합보안 제품 엔진의 크기가 커지므로 경량화에 대한 요구가 지속적으로 확대될 것으로 보인다. 보안 업체는 엔진 파일 크기의 증가를 최소화하고 행위 기반, 가상화 등의 기술을 접목하는 한편, 파일/프로세스 검사 시 파일 I/O(Input/Output), CPU 사용량을 최소화하기 위한 다양한 방법을 찾고 있다. 


지난해 안철수연구소가 출시한 ‘V3 365 클리닉 2.0’의 경우가 최근 통합보안 제품 업계의 경량화 트렌드를 가장 먼저 반영, 시장에 선보인 예로 들 수 있다. 공통 요소의 모듈화, 최적화를 통해 CPU, 메모리 등 주요 리소스의 사용을 최소화했다. 이로써 용량은 1/10로 줄어들고, 실행과 검사 속도가 이전 버전과 비교해 2-3배 빨라졌다. 특히 메모리 점유율을 개선하여 실시간 감시 중에도 속도 저하를 전혀 느낄 수 없는 수준으로 개선하였다. 


시만텍의 노턴 2009의 경우도 시스템 리소스에 대한 부하를 줄이는 데 초점을 맞춰 통합보안 제품 가동에 따른 PC 속도 저하 문제를 줄이는 데 중점을 두었다고 강조하고 있다. 실질적으로 300MB가 넘는 용량이 100MB로 크게 줄어들었으며 검사 속도 또한 확연히 줄어들었다고 시만텍 측은 설명하고 있다. 


이러한 통합보안 제품의 ‘Lighter and Faster’의 추구는 실시간 감시만 켜두면 버벅거리는 PC 때문에, 그리고 두세 시간의 시스템 검사 시간 때문에 답답해하던 사용자들에게 ‘보안이냐 편리함이냐’란 딜레마를 훌훌 털어버리게 할 수 있는 반가운 성과라고 할 수 있다.


단순 백신을 넘어 토털 PC 케어로

사람들은 컴퓨터를 사용하면서 늘 궁금하고 답답하다. ‘늘 내 PC는 느린 것 같아’, ‘왜 나만 하면 인터넷이 이렇게 느려지지?’ PC에서 발생하는 문제의 원인은 매우 다양하다. 그 해결 방법 또한 원인만큼 복잡하고 다양하다. 하지만 그 원인을 알고 해결할 수 있는 파워유저보다 일반 초보 유저가 절대적으로 많아지고 있다. 단순히 백신 고유의 기능인 악성코드 치료만으로는 ‘편리하고 안전한 PC의 사용’에 어려움을 겪는 사용자가 대부분이라는 것이다. 


이에 보안 업체의 고민이 있고 여기서 통합보안, 토털 케어로의 미래를 엿볼 수 있다. 물론 현재도 레지스트리, 디스크 등 리소스에 대한 최적화, 드라이버 업데이트 등으로 기능 확장을 해 나가고 있으나 아직은 운영체제에서 제공해 주는 기능의 확장에 머물러 있다.
 


향후 보안 업계는 이와 같은 기능 확장과 웹 보안과의 결합이 지속적으로 이루어질 것으로 보인다. 백신이 초기 의료 체계를 모델링해서 나왔듯이 지속적인 모니터링과 관리를 받을 수 있는 서비스 형태로 진화할 것으로 전망된다. 또한 PC에 문제가 있을 때 사용자가 조치하는 수동적인 방법에서 자체적으로 판단하고 능동적으로 대응하는 형태의 ‘능동형 서비스’로 발전해 나갈 것으로 보인다.


도전과 응전은 계속된다

자동차를 타는 사람들이 처음에는 사고에 대응하지 못했지만 점차 안전벨트를 메고, 에어백을 달고, 후진 센서를 달고 하는 식으로 안전에 대한 노력을 해 온 것처럼, 우리가 생각할 수 있는 미래는 지금보다 더 편리한 환경을 제공할 것이다. 


마찬가지로 악성코드가 사라지지 않을 것이 자명하지만, 또 분명한 것은 악성코드들을 막기 위한 인간의 노력은 더 많은 발전을 이룰 것이고, 보안을 전문적으로 연구하는 좋은 기업들의 노력이 빛을 발할 것이라는 점이다. 


악성코드가 들어오는 방법, 악성코드가 숨어 있는 것을 찾는 방법, 악성코드가 최종적으로 노리는 목표를 찾아내고 위험을 제거하기 위한 기술 등 실질적인 방어를 위한 연구를 쉬지 않고 고민하고 찾아내고 있는 전문가들이 있기 때문이다. 그리고 인류의 역사는 끊임없는 공격과 방어에 대한 연구에서 발전하여 왔고 그러한 노력을 통하여 더 살기 좋은 세상을 만들어 왔기 때문이다. 

'scrap' 카테고리의 다른 글

IPS  (0) 2010.03.27
IPS  (0) 2010.03.27
[안랩] 파일 기반의 탐지기법  (0) 2010.03.19
[안랩] 에뮬레이터와 샌드 박스  (0) 2010.03.19
Exploit Site  (0) 2010.03.19
[기획 특집]알려지지 않은 악성코드 탐지 기법

2006년은 컴퓨터 바이러스가 제작 된지 20주년을 기념하는 한 해였다.
이 20년이라는 긴 세월 속에서 컴퓨터 바이러스는 파일 감염을 목적으로 하는 바이러스(Virus)로부터 네트워크를 통한 급속한 확산을 시도하는 웜(Worm) 그리고 데이터 유출을 위한 트로이목마(Trojan Horse)에 이르기까지 다양한 모습으로 발전하였다. 이러한 악성 코드의 위협은 해가 갈수록 증가 추세를 이루고 있으며 기술적인 면에서도 더욱더 위험성을 더해 가고 있어 컴퓨터 사용자들을 불안하게 만들고 있는 것이 사실이다. 그러나 이렇게 증가하는 악성 코드의 위협 에 맞서는 안티 바이러스(Anti-Virus) 업체 역시 새로운 악성 코드의 위협들로부터 컴퓨터 시스템을 보호하기 위해 다양한 대응 방안들을 활발하게 연구하고 있다.
이러한 다양한 대응 방안들의 기본 전제가 바로 “급속하게 확산되는 알려지지 않은 새로운 악성 코드에 어떻게 대응할 것인가?”라는 점이다. 이 명제는 결국 새로운 악성 코드를 어떻게 효과적으로 탐지할 것인가의 문제로 볼 수 있다. 이러한 문제를 해결하기 위해 안티 바이러스(Anti-Virus) 업체의 알려지지 않은 악성 코드 위협에 대응하기 위한 다양한 안티 바이러스(Anti-Virus) 탐지 기법들과 그 탐지 기법들의 특징들에 대해서 알아 보도록 하자.

[1] 악성코드의 증가와 조기 대응의 필요성
[2] 파일기반의 탐지 기법
[3] 에뮬레이터와 샌드박스
[4] MIME 필터링 탐지 기법
[5] 행위 기반 탐지 기법



2. 파일기반의 탐지 기법(File Base Detection Tech)

현재까지 알려진 안티 바이러스(Anti-Virus) 소프트웨어 대부분이 파일 기반(File Base)의 진단법을 사용하고 있다. 이는 대부분의 악성 코드가 특정 운영체제에서 실행되기 위해서는 해당 운영체제에서 실행이 가능한 특정한 파일 형태로 되어 있다는 점에서 기인한 것이다. 그러므로 악성 코드가 윈도우 시스템(Windows System)에서 실행되기 위해서는 윈도우 시스템에서 실행 가능한 파일 포맷인 PE(Portable Executable) 형식을 가지고 있어야 된다는 것이다.


[그림 3] PE(Portable Executable) 형식의 악성 코드 파일

이러한 PE(Portable Executable) 형식의 악성 코드를 진단하기 위해서는 안티 바이러스(Anti-Virus) 소프트웨어 역시 이러한 파일 형식을 인식하고 악성 코드로 판단을 내릴 수 있는 특정 형식의 시그니처(Signature)를 가지고 있어야 된다. 이러한 진단법이 대부분의 안티 바이러스(Anti-Virus) 소프트웨어가 사용하는 시그니처 기반(Signature Base) 또는 스트링(String – 여기서 말하는 스트링이란 일반적인 문자열이 아닌 파일의 헥사코드(Hex Code)를 의미하는 것이다.) 검사 방식이라고 이야기하는 진단법이다. 이러한 시그니처 기반(Signature Base)의 진단법은 악성 코드로 분류된 파일의 특정 부분 또는 고유한 부분을 검사의 대상으로 삼으므로 오탐(False Positive)과 미탐(False Negative)을 최소화하는 정확한 진단이 가능하다는 것과 파일 검사 시에 파일들의 특징적인 부분들만 비교 함으로 빠른 스캐닝(Scanning)을 장점으로 들 수 있다.

그러나 이러한 시그니처 기반(Signature Base) 진단법은 악성 코드의 파일 자체가 몇 백 바이트(Byte)만 바뀌어도 진단이 되지 않는 미탐(False Negative)이 발생함으로 파일이 조금만 변경된 새로운 변형에 대해서는 대응을 할 수가 없게 된다. 그리고 기존에 알려진 악성 코드에 대해서만 대응을 할 수 있으므로 새로운 형태의 알려지지 않은 악성 코드에 대해서는 대응을 할 수 없다는 단점을 가지고 있다.

1) 휴리스틱 탐지 기법 (Heuristic Detection Tech)

이러한 시그니처 기반(Signature Base)의 진단법이 가지고 있는 한계를 극복하고자 개발한 탐지 기법 중 하나가 휴리스틱 탐지(Heuristic Detection) 기법이다. 휴리스틱 탐지(Heuristic Detection) 기법은 일반적인 악성 코드가 가지고 있는 특정 폴더에 파일 쓰기와 특정 레지스트리 부분에 키 생성과 같은 명령어(Instruction)들을 스캐닝 엔진(Scanning Engine)에서 시그니처(Signature)화하여 파일을 검사할 때 이를 사용한다. 그래서 검사 대상 파일이 휴리스틱 시그니처(Heuristic Signature - 이 것을 부스터(Booster)라고도 한다.)와 비교를 통하여 일반적으로 알려진 악성 코드와 얼마나 높은 유사도를 가지고 있는지를 판단하여 알려지지 않은 새로운 악성 코드를 탐지하는 기법이다.
이러한 휴리스틱 탐지(Heuristic Detection) 기법은 검사 대상이 되는 파일에 대해서 휴리스틱(Heuristic) 검사 시에 스캐닝 엔진(Scanning Engine)이 어떠한 형태를 취하는가 에 따라서 아래와 같이 크게 2가지 형태로 나누어서 볼 수 있다.

- 동적 휴리스틱 탐지 기법 (Dynamic Heuristic Detection Tech)
동적 휴리스틱 탐지(Dynamic Heuristic Detection) 기법은 검사 대상이 되는 파일을 가상화된 영역 또는 운영체제와 분리된 특정 공간에서 파일 실행(File Execution)을 통해 수집한 다양한 정보들을 휴리스틱 시그니처(Heuristic Signature)와 비교를 통하여 검사를 수행하는 기법이다. 즉 검사 대상이 되는 파일이 어떠한 형식으로든 실행이 되어야 하며 이러한 점으로 인해 런 타임 휴리스틱 탐지 (Run-Time Heuristic Detection) 기법이라고도 불리고 있다. 이러한 동적 휴리스틱 탐지(Dynamic Heuristic Detection) 기법은 이 후에 다룰 에뮬레이터(Emulator)과 샌드박스(Sandbox)에서 조금 더 자세하게 알아 보도록 하자.

- 정적 휴리스틱 탐지 기법 (Static Heuristic Detection Tech)
정적 휴리스틱 탐지(Static Heuristic Detection) 기법은 동적 휴리스틱 탐지(Dynamic Heuristic Detection) 기법과는 반대로 파일에 대해서 어떠한 형식의 파일 실행(File Execution) 없이 파일 자체를 그대로 스캐닝 엔진(Scanning Engine)에서 읽어 들여 휴리스틱 시그니처(Heuristic Signature)와 비교를 수행하는 탐지 기법이다.


[그림 4] 정적 휴리스틱(Static Heuristic)과 동적 휴리스틱(Dynamic Heuristic)

이 외에도 네거티브 휴리스틱(Negative Heuristic – 이 것을 스토퍼(Stopper)라고도 한다.)탐지 기법도 있다. 이는 이제까지 기술한 휴리스틱 탐지(Heuristic Detection) 기법과는 반대로 악성 코드에서 전형 사용하지 않은 윈도우 팝업 창 생성과 같은 명령어(Instruction)들이 존재 할 경우에는 악성 코드로 판단하지 않는 기법이다. 즉, 휴리스틱 시그니처(Heuristic Signature)와 동일한 명령어들이 존재하지 않는 부정의 경우에만 악성 코드로 판단한다.
이러한 형태들의 휴리스틱 탐지(Heuristic Detection) 기법은 기존에 알려진 악성 코드도 탐지가 가능하며 알려지지 않은 새로운 악성 코드 역시 탐지가 가능하다는 점에서 매력적인 탐지기법이라고 할 수 있다. 그러나 이 탐지 기법은 정상 파일을 악성 코드라고 판단하게 되는 오탐(False Positive)의 발생이 가장 큰 단점으로 작용한다. 특히나 파일을 삭제하고 치료하는 안티 바이러스(Anti-Virus) 소프트웨어의 특성상 오탐(False Positive)율이 높게 된다면 컴퓨터 시스템 자체에 큰 문제를 유발할 수 있게 됨으로 이는 치명적인 문제점이라고 볼 수 있다.

2) 제너릭 탐지 기법 (Generic Detection Tech)

앞서 설명한 휴리스틱 탐지(Heuristic Detection) 기법 외에도 알려지지 않은 악성 코드를 탐지하기 위한 기법 중에는 제너릭 탐지(Generic Detection) 기법이라는 것이 있다. 이 탐지 기법은 유사한 형태의 악성 코드 집합을 탐지하기 위해 해당 집합을 이루는 악성 코드 파일들의 공통된 코드 영역(Code Section)을 진단하도록 한다. 그러므로 소스 코드(Source Code)상에서 사용자 코드(User Code)의 변화가 없거나 약간의 수정만 가하여 컴파일(Compile)만 새롭게 하여 생성한 새로운 악성 코드 변형들에 대해 탐지가 가능함으로 유사한 형태의 악성 코드 변형들이 지속적으로 제작되더라도 시그니처(Signature) 업데이트 없이 탐지가 가능하다는 장점이 있다.

이러한 제너릭 탐지(Generic Detection) 기법에서는 일반적으로 파일에 대한 OPcode(Operation Code) 명령어 비교 방식이 많이 사용되고 있다. 이 OPcode(Operation Code) 명령어 비교 방식에는 크게 와일드카드 비교(Wildcard Matching – Don’t Care 비교라고도 한다)와 미스매칭(Mismatching) 방식으로 나누어진다. 먼저 와일드카드 비교(Wildcard Matching)는 유사한 형태의 악성 코드 변형들의 특정 코드 영역(Code Section)에서 사용되는 OPcode(Operation Code) 명령들이 조금씩만 다르고 동일할 경우 해당 다른 OPcode(Operation Code) 명령어 부분에 와일드카드를 적용하여 다른 OPcode(Operation Code) 명령어가 사용되어도 이를 무시하겠다는 것이다.


[그림 5] 메모장(Notepad.exe) 프로그램의 OPcode(Operation Code) 명령어들

[그림 5]를 예로 들어 메모장 프로그램을 원본 악성 코드라고 가정을 한다면 이 원본 악성 코드의 일부 OPcode(Operation Code) 명령어들은 [그림 5]의 붉은색 박스 영역의 순서대로 진행된다. 이렇게 PUSH, PUSH, PUSH, PUSH 순서로 진행되는 OPcode(Operation Code) 명령어들이 다른 악성 코드 변형들에서는 PUSH, PUSH, PUSH, MOV가 사용된다면 마지막 MOV 부분을 와일드카드(Wildcard)로 적용하여 마지막 4번째 OPcode(Operation Code) 명령은 어떠한 것이 사용되더라도 이에 구애 받지 않겠다는 것이다. 이렇게 적용하게 되면 원본 악성 코드와 변형 악성 코드의 전체 OPcode(Operation Code) 명령어 진행 순서는 유사한데 일부가 조금 틀리더라도 모두 진단하게 되는 효과를 구현할 수가 있다. 그러나 미스매칭(Mismatching) 방식은 와일드카드 비교(Wildcard Matching)와는 반대로 MMX(Multi Media eXtension) 명령어 또는 FPU(Floating Point Unit) 명령어와 같이 악성 코드에서 잘 사용되지 않는 명령어들이 [그림 5]의 해당 붉은색 박스영역과 같이 특정 부분에 사용 될 경우, 해당 파일을 악성 코드 변형으로 판단하지 않겠다는 것이다. 이런 미스매칭(Mismatching) 방식은 앞서 설명한 네거티브 휴리스틱(Negative Heuristic) 탐지 기법과 기본적인 개념은 동일하다고 볼 수 있다.

그러나 이러한 제너릭 탐지(Generic Detection) 기법은 악성 코드의 공통된 코드 영역을 진단함으로 새로운 악성 코드 변형들이 제작되더라도 탐지가 가능하다는 장점이 있지만 새로운 악성 코드 변형들이 완전히 새로운 OPcode(Operation Code) 명령어 순서로 진행된다던가 아니면 안티 디버깅(Anti-Debugging)과 암호화(Encryption) 등과 같이 실행 파일 보호 기법을 통해 OPcode(Operation Code) 명령어의 진행 순서를 뒤섞어 놓게 된다면 스캐닝 엔진(Scanning Engine)에서는 이를 탐지하지 못하게 되는 문제가 발생할 수가 있다.

이상으로 파일을 기반으로 알려지지 않은 악성 코드 탐지 기법들에 대해서 알아 보았다. 다음으로는 파일 실행을 통해서 탐지하는 동적 휴리스틱 탐지(Dynamic Heuristic Detection) 기법 설명 시에 잠시 언급한 에뮬레이터(Emulator)와 샌드박스(Sandbox)에 대해서 알아보도록 하자.[Ahn]

[저자] 안철수연구소 ASEC 장영준 주임연구원 

'scrap' 카테고리의 다른 글

IPS  (0) 2010.03.27
[안철수연구소 칼럼] 바이러스 및 악성코드와 백신의 미래  (0) 2010.03.19
[안랩] 에뮬레이터와 샌드 박스  (0) 2010.03.19
Exploit Site  (0) 2010.03.19
DDOS 개요 및 기법 요약  (0) 2010.03.19

3. 에뮬레이터(Emulator)과 샌드박스(Sandbox)

앞 장에서 설명한 새로운 악성 코드 탐지기법들은 모두 실행 파일(Executable File) 자체를 대상으로 한 탐지 기법들이다. 그러나 이번 장에서 설명하는 에뮬레이터(Emulator)와 샌드박스(Sandbox)는 모두 실행 파일(Executable File) 자체에 관한 탐지 기법이 아니라 해당 실행 파일(Executable File)의 실행을 통해 수집한 정보들을 이용하여 새로운 악성 코드를 탐지하는 기법들이다. 그러므로 앞서 이야기한 바와 같이 실행 파일(Executable File)의 실행을 통하여 새로운 악성 코드를 탐지하는 동적 휴리스틱 탐지(Dynamic Heuristic Detection) 기법과도 상당히 밀접한 연관 관계를 가지고 있는 것이다.

1) 에뮬레이터(Emulator)

사전적인 의미에서 에뮬레이터(Emulator)는 대리 실행기 라는 의미를 가지고 있다. 대리 실행기 라는 의미에서와 같이 에뮬레이터(Emulator)는 실제 컴퓨터 시스템 상에서 실행 파일(Executable File)을 직접적으로 실행하는 것이 아니라 실제 컴퓨터 시스템에 가상(Virtual)의 환경이나 가상의 하드웨어(Hardware) 이미지를 생성하여 해당 가상 하드웨어(Hardware)를 통하여 간접적으로 실행하는 것을 의미한다. 이러한 의미로 인해 일부에서는 에뮬레이터(Emulator)를 이용한 탐지 기법을 코드 에뮬레이션(Code Emulation) 또는 CPU 에뮬레이션(CPU Emulation) 이라고도 이야기 한다.

이 탐지 기법은 실제 컴퓨터 상에서 스캐닝 엔진(Scanning Engine)이 검사를 수행하지만 컴퓨터 시스템 내부에 가상의 CPU와 메모리 등의 가상의 환경을 제공하여 실행 파일(Executable File)을 실행하고 정보를 수집함으로 실제 컴퓨터 시스템에서는 악성 코드로 인한 어떠한 감염 피해도 발생하지 않는다. 이러한 점으로 인해 알려지지 않은 악성 코드를 탐지하기 위한 부분에서는 상당히 강력한 방법이라고 할 수 있다.
이러한 가상의 환경을 이용하는 에뮬레이터(Emulator)가 컴퓨터 시스템에서 구현되기 위해서는 크게 다음과 같은 4가지가 포함 되어야 한다.

- 가상 CPU 환경
실행 파일을 실제 CPU를 이용한 연산과 동일하게 처리하기 위해 일반적인 모든 명령어들뿐만이 아니라 MMX(Multi Media eXtension) 명령어와 FPU(Floating Point Unit) 명령어까지도 모두 처리 할 수가 있어야 한다.

- 가상 메모리 환경
32비트(Bit) 주소 체계에서는 최고 4 기가바이트(GB)까지 확장이 가능하지만 가상의 메모리 환경에서는 이렇게 많은 메모리는 필요하지 않다. 다만, 실행 파일(Executable File)이 실행되었을 때 변경하는 메모리 주소들에 대해 모두 기록하고 이를 추적할 수 있어야 하며 논리적인 메모리 주소와 물리적인 메모리 주소들을 모두 제공할 수 있어야 한다.

- 가상 저장 장치 환경
물리적인 저장 장치와 동일하게 실행 파일(Executable File) 실행 시 발생하는 저장 장치에 대한 파일 읽기 및 쓰기처럼 저장 장치에 대한 I/O(Input/Output)가 발생할 때 에뮬레이터(Emulator)에서는 실제 하드웨어와 동일한 환경을 제공 할 수 있어야 한다.

- 에뮬레이션 제어기(Emulation Controller)
에뮬레이션 제어기(Emulation Controller)는 에뮬레이터(Emulator)에서 가장 핵심이 되는 부분이다. 실행 파일(Executable File)이 가상 환경에서 실행 시 악성 코드로 판단 할 수 있을 정도의 충분한 정보를 수집하고 이를 제어하는 것이 바로 에뮬레이션 제어기(Emulation Controller)이기 대문이다. 그래서 에뮬레이션 제어기(Emulation Controller)에서는 실행 중인 악성 코드를 어느 시점에서 실행을 중단할 것인가와 얼마 정도의 시간을 실행에 소비할 것인가를 판단하고 제어할 수 있어야 한다. 일반적으로는 인텔 X86 CPU에서 에뮬레이션(Emulation)을 수행 하기 위해서는 최소 1,000개에서 최대 30,000개의 CPU 명령어 수행과 함께 45초 정도의 시간 소요를 기본으로 설정 한다.

이렇게 가상의 환경에서 실행 파일(Executable File)을 실행하고 수집된 실행 결과들을 통해서 악성 코드로 판단하는 에뮬레이터(Emulator)는 실제 시스템에 전혀 감염의 피해를 입히지 않고 알려지지 않은 악성 코드를 탐지할 수 있다는 점에서는 상당히 강력한 방법이라고 이야기 하였다. 하지만 에뮬레이터(Emulator)는 스캐닝 엔진(Scanning Engine)이 실행 파일(Executable File)을 검사 할 때마다 모두 가상의 환경에서 실행을 하고 분석을 해야 된다는 점에서는 컴퓨터 시스템에 대한 자원 소모가 커지게 되는 부담을 안고 있다. 이 문제로 인해 전반적인 스캐닝 엔진(Scanning Engine)의 검사 속도 저하로 이어지는 점이 가장 큰 단점이라고 할 수 있다.

2) 샌드박스(Sandbox)
에뮬레이터(Emulator)와 샌드박스(Sandbox)는 실행 파일(Executable File)의 실행을 통하여 수집된 정보를 통하여 악성이라고 판단하는 점에서는 유사한 형태라고 할 수 있다. 그러나 에뮬레이터(Emulator)와 샌드박스(Sandbox)의 가장 큰 차이점은 어떠한 형태로 실행 파일(Executable File)을 실행하고 어떠한 방식으로 악성 코드로 판단할 수 있는 정보들을 수집하는가에 가장 큰 차이점을 가지고 있다.
일반적으로 샌드박스(Sandbox)는 어플리케이션 에뮬레이터(Application Emulator)라고도 알려져 있는데 이러한 명칭에서 알 수 있듯이 샌드박스(Sandbox)는 에뮬레이터(Emulator)와는 달리 가상의 공간을 생성하는 것이 아니라 실제 컴퓨터 시스템상에서 바로 실행 파일(Executable File)을 실행하고는 정보를 수집한다는 점에서 가장 큰 차이점을 가지고 있다.


[그림 6] CWSandbox의 기본 구조

일반적인 어플리케이션 에뮬레이터(Application Emulator)로 널리 알려져 있는 CWSandbox는 [그림 6]과 같은 기본적인 구조로 되어 있다. CWSandbox의 경우 실행 파일(Executable File)이 실행되면 해당 파일의 스레드(Thread)로 모니터링 모듈인 CWMonitor.dll 파일을 인젝션(Injection) 시킨다. 인젝션(Injection) 이 후 해당 실행 파일(Executable File)이 실행되는 되는 모든 절차를 추적하여 해당 정보를 모두 CWSnadbox로 전달하게 된다.


[그림 7] CWSnadbox에서 윈도우 API 호출의 후킹(Hooking)

그리고 실행 파일(Executable File)이 실행되는 과정에서 발생하는 윈도우 API(Windows API) 호출 모두를 API 후킹(API Hooking) 기법을 이용하여 가로챈 후 CWSandbox로 전달 된 다. 전달 된 윈도우 API(Windows API) 호출은 CWSandbox를 통해 윈도우 커널 레벨(Windows Kernel Level)로 전달하는 정상적인 절차를 수행하게 되고 호출되는 윈도우 API(Windows API) 역시 호출한 해당 실행 파일(Executable File)로 바로 전달하는 것이 아니라 CWSandbox를 거쳐서 전달하게 되는 것이다. 이러한 과정을 표현한 것이 바로 [그림 7]과 같다.

그런데 여기에서 바로 어플리케이션 에뮬레이터(Application Emulator)인 샌드박스(Sandbox)의 가장 큰 특징이 나타난다. 호출 되는 윈도우 API(Windows API)가 CWSandbox를 통해 실행 파일(Executable File)로 전달 된 후 다시 그 리턴 값이 윈도우 운영체제로 바로 전달 되는 것이 아니라 CWSandbox를 통해 전혀 다른 리턴 값을 윈도우 운영체제로 전달하게 된다는 것이다. 이러한 다른 리턴 값을 전달하게 됨으로 실행 파일(Executable File)이 악성 코드여서 감염으로 인해 발생하는 악의적인 기능들이 모두 CWSandbox에 의해 걸러지게 됨으로 실질적인 컴퓨터 시스템에는 감염으로 인한 피해가 발생하지 않게 된다. 그리고 수집된 윈도우 API(Windows API) 호출과 리턴된 값과 같은 정보들을 통하여 CWSandbox는 해당 실행 파일(Executable File)이 알려지지 않은 악성 코드인지 판단을 하게 된다.
그러나 에뮬레이터(Emulator)와 같이 가상의 공간이 아닌 실제 컴퓨터 시스템의 환경에서 실행 파일(Executable File)을 실행하는 샌드박스(Sandbox) 역시 윈도우 응용 프로그램이다. 그러므로 샌드박스(Sandbox)가 특정 악성 코드를 정상적으로 제어하지 못하게 될 경우에는 그 감염으로 인한 피해가 고스란히 실제 시스템으로 전달되게 됨으로 예측하지 못하는 문제가 발생할 가능성이 크다.

이제까지는 실행 파일(Executable File)의 실행을 통해서 알려지지 않은 악성 코드를 탐지 할 수 있는 에뮬레이터(Emulator)와 샌드박스(Sandbox)에 대해서 알아 보았다. 하지만 다음 장에서는 일반적인 윈도우 실행 파일 포맷이 아닌 전자 메일로 형태는 급속한 확산을 시도하는 알려지지 않은 매스 메일러 웜(Mass Mailer Worm)을 탐지 할 수 있는 기법에 대해서 알아 보도록 하자.[Ahn] 

'scrap' 카테고리의 다른 글

[안철수연구소 칼럼] 바이러스 및 악성코드와 백신의 미래  (0) 2010.03.19
[안랩] 파일 기반의 탐지기법  (0) 2010.03.19
Exploit Site  (0) 2010.03.19
DDOS 개요 및 기법 요약  (0) 2010.03.19
ICMP Flooding  (0) 2010.03.19

1. packetstorm.linuxsecurity.com
2. synnergy.net
3. unsecure.altervista.org
4. www.blacksheepnetworks.com
5. www.circlemud.org
6. www.dsinet.org
7. www.metasploit.com
8. www.nostarch.com
9. www.packetstormsecurity.org
10. www.rosiello.org
11. www.safemode.org
12. www.security-corporation.com
13. www.thc.org

'scrap' 카테고리의 다른 글

[안랩] 파일 기반의 탐지기법  (0) 2010.03.19
[안랩] 에뮬레이터와 샌드 박스  (0) 2010.03.19
DDOS 개요 및 기법 요약  (0) 2010.03.19
ICMP Flooding  (0) 2010.03.19
SYN Flooding  (0) 2010.03.19

D-DOS란 "Distribute Denial of Service attack"의 약자로 우리말로는'서비스 분산 거부 공격' 이라고한다.
단적으로 특정 기법을 통해 대량의 네트워크 접속을 유발해 해당 네트워크, 서버등의 시스템을 마비시키는 악의적인 네트워크에 대한 공격이다.
결과적으로 네트워크 마비 등으로 인해 정상 이용 고객들의 접속 자체도 이루어지지 않는 상태가 되는것으로
다음의 기법들이 대표적으로 많이 사용되고 있다.

1. SYN Flood
특정 TCP 포트로  허용치 보다 초과된 수의 연결 요청(SYN) 전송
대부분 Source IP가 Spoofing 되어 있음

2. UDP Flood
허용치 보다 초과된 수의 UDP 패킷

3. ICMP Flood
허용치 보다 초과된 수의 ICMP 패킷

4. Fragment Flood
허용치 보다 초과된 수의 fragmented IP  패킷

5. Connection Flood
Connection 수가 정상의 경우보다 매우 높은 경우

6. Source Flood
단일 Source 가 허용치보다 많은 수의 IP 패킷을 전송하는 경우

7. Zombie 공격 
너무 많은 합법 IP Source로부터 합법적인 TCP 패킷을 전송하는 경우

8. Slammer 공격 
허용치 보다 초과된 수의 패킷이 UDP 포트 1434로 전송

9. DNS 공격 
허용치 보다 초과된 수의 패킷이 UDP 포트 53으로 전송

10. My Doom 공격 
Zombie로부터 허용치보다 높은 수의 HTTP 패킷 전송

11. Smurf 공격
대상 서버의 소스 주소를 위조하여 다수의 Echo(Ping) 메시지를 IP Broadcast트 주소로 전송. 
해당 Broadcast주소로 트래픽을 전달하는 라우팅 장치가 Layer 2 Broadcast 기능에 대해 IP Broadcast를 
수행하기 때문에 대부분의 네트워크 호스트는 각각 ICMP Echo 요청을 받아들여 Echo 응답을 수행하게 되므로 응답 중인 호스트 수에 비례하여 트래픽이 증가

12. Fraggle 공격  
Fraggle은 UDP (7)Echo  메시지를 사용한다는 점을 제외하곤 smurf와 유사함. 
멀티액세스 Broadcast 네트워크에서는 수백 대의 시스템이 각 패킷에 응답할 수 있음.
Echo(7) 및 Chargen(UDP 19)를 이용하여 Loop 형성 가능 

특히 최근에는 악성코드 혹은 바이러스를 통한 Bot 감염에 의한 좀비PC들(BotNet)이 D-dos 공격에 많이 이용되는 7번 이후의 공격이 증가하고 있으며 IDC내로 최근에 유입되는 트래픽이 수G를 넘는 경우도 흔하다.

현재 국내외의 많은 네트워크 장비업체, 솔루션 업체에서 D-Dos 방어 장비, 솔루션이 출시되고 있으나 워낙 다양한 공격에 대처하기에는 기반 기술자체의 한계로 인해 효용성이 떨어지고 있다.

기존의 대부분 IDS, IPS,  백신등의 기본 아키텍처가 Signature 를 기반으로 패킷 비교를 통한 차단방식을 사용하고 있으나 근본적으로  D-Dos 공격 자체가 TCP, UDP 프로토콜 자체의 취약성 혹은 매커니즘을 이용한 대량 패킷을 전송해서 시스템 혹은 네트워크에 과부하를 일으키는 방식을 사용함에 따라 Signature가 없거나 수집이 되었다 해도 해당 패턴이 장비에 업데이트가 되는데 수시간 혹은 수십일이 소요되는 현실을 감안할때 일명 "Zero Day 공격"에는 근본적으로 대처할 수가 없는것이 현실이다.

단, 현재 해외에서 각광받는 RBIPS(Rate-Based Intrusion Prevention System) 장비가 큰 효과를 얻고 있다고 하는데 해당 장비에 대해서 조만간 소개해 보겠다.

'scrap' 카테고리의 다른 글

[안랩] 에뮬레이터와 샌드 박스  (0) 2010.03.19
Exploit Site  (0) 2010.03.19
ICMP Flooding  (0) 2010.03.19
SYN Flooding  (0) 2010.03.19
UDP Flooding  (0) 2010.03.19

ICMP(Internet Contol Message Protocol)는 IETF RFC792에 정의된 프로토콜로써 호스트간 혹은 호스트와 라우터간의 에러 상태 혹은 상태 변화를 알려주고 요청에 응답을 하는 기능을 담당하는 네트워크 제어프로토콜이다. 활성화된 서비스나 포트가 필요하지 않는 유일한 프로토콜이다. 이러한 ICMP의 특징을 악용한 ICMP Flooding은 대량의 ICMP패킷을 공격자가 직접 victim에게 전송하는 방법으로 그 변종의 예러 Smurf, Welchia worm 등이 있다. Smuf는 공격자가 source IP address를 victim의 IP address로 설정한 후, broadcast address로 ICMP ehco request패킷을 전송하면 그 하위 모든 시스템들이 ICMP echo reply 패킷을 victim으로 전송하게 되어 대량의 패킷들이 집중하여 네트워크 부하를 높이게 된다. 최근 발견된 Welchia worm은 감연 시스템에 대하여 IP address의 B클래스를 고정시키고 C클래스부터 증가시키며 ICMP 패킷을 전송하여 다른 감염 대상을 찾고 감염 시스템의 성능을 저하시키는 형태이다.

Snap2.bmp


'scrap' 카테고리의 다른 글

Exploit Site  (0) 2010.03.19
DDOS 개요 및 기법 요약  (0) 2010.03.19
SYN Flooding  (0) 2010.03.19
UDP Flooding  (0) 2010.03.19
Denial Of Service  (0) 2010.03.19

트래픽 모니터로 '패킷 개수' 체크
네트워크 장비라고 함은 스위치, 파이어월, 라우터 등을 말하며, 대다수의 네트워크 장비에는 자체적으로 포트별 트래픽 또는 세션별 트래픽을 관찰할 수 있는 기능이 있다. 물론 포트별 트래픽이나 전체 트래픽을 관찰할 수 있는 NMS(Network Management System)를 활용할 수도 있다. 네트워크 장비를 이용하는 것은 웜 트래픽의 패턴을 찾는다기보다는 트래픽의 양을 관찰하는 것이다. 트래픽이 많고 적음으로 웜인지 아닌지를 판단하는 것은 조금 위험스러운 생각이라고 할 수도 있겠지만, 웜 트래픽의 특징을 생각해보면 간단하게 웜에 감염된 PC 또는 IP 어드레스를 찾을 수 있다. 
여기에서 전체 송수신되는 데이터 양(Bytes)을 기준으로 판단하기 보다 패킷 개수로 판단해야 한다. 데이터 양을 기준으로 판단하면 많은 데이터를 업, 다운로드하는 경우와 혼동될 수 있기 때문이다. 예를 들어 SYN 공격이라고 하면 대략 100Mbps 네트워크에서 초당 1000개 이상의 SYN 패킷이 한 IP 어드레스를 통해 전송된다. 하지만 SYN 패킷은 크기가 65bytes이기 때문에 1초에 전송하는 데이터 양은 65Kbytes이다. 또한 대역폭 사용양도 700Kbps 미만으로 1%도 되지 않는다. 
물론 많은 NMS 도구를 사용해 전체 트래픽 발생량을 수시로 관찰해야 한다. 많은 고객 사이트를 방문하면서 의아해했던 점이 대부분 패킷 개수보다는 대역폭에 영향을 주는 데이터 양에 더 신경을 쓴다는 것이었다. 장비에 과부하를 발생시키는 것은 물론 총 송수신되는 데이터 양일 수도 있지만, 더더욱 영향을 주는 것이 패킷의 개수이다. 이제 다음과 같은 경우를 생각하면서 트래픽을 관찰해 보자.

·특정 IP 어드레스 또는 포트를 살펴보니 송신되는 패킷은 상당히 많은데 수신되는 패킷은 없다
·데이터 양(bytes)에 비해 송수신되는 패킷의 개수가 너무 많다
·한 IP 어드레스가 지나치게 많은 세션을 형성한다

사용자가 아무리 손이 빠르고 애플리케이션이 특수하게 설계돼 있다고 하더라도 1초에 100여 개 이상의 세션을 한 IP 어드레스가 형성하기란 쉽지 않다. 모두가 비정상적인 트래픽으로 생각할 수 있다. 
실제 패킷을 저장할 수 없는 NMS 도구나 장비의 콘솔 화면을 사용하는 것은 간단하고 추가 비용이 들지 않는다는 장점이 있지만, 몇 가지 어려움이 있다. 첫째, 사용자가 수시로 장비에 접속해 트래픽 상태를 관찰해야 하기 때문에 오히려 해당 장비에 부하를 가중할 수 있다. 둘째 과도한 트래픽에 의해 시스템이 과부하 상태인 경우에는 트래픽을 관찰하기 위해 접속하기 조차 힘들 수 있다. 
셋째 IP 어드레스별 트래픽과 세션 정보를 관찰할 수 있지만, 의심되는 트래픽이 실제 웜으로 인해 발생하는 트래픽인지 분석하기 어렵다. 즉, 증거가 될만한 실제 패킷을 저장할 수 없다. 이것은 패킷 저장 기능이 있는 NMS나 IDS(Intrusion Detection System)를 사용해 해결할 수도 있다. 넷째 의심되는 IP 어드레스에 대한 차단은 사용자 몫이다. 주의할 점은 트래픽뿐만 아니라 해당 장비의 CPU, 메모리 상태도 항상 점검해야 한다는 것이다.

'scrap' 카테고리의 다른 글

DDOS 개요 및 기법 요약  (0) 2010.03.19
ICMP Flooding  (0) 2010.03.19
UDP Flooding  (0) 2010.03.19
Denial Of Service  (0) 2010.03.19
dt 명령어  (0) 2010.03.18

UDP(User Datagram Protocol)를 이용한 패킷전달은 비연결형 서비스로서 포트대 포트로 전송한다. 대표적인 응용 서비스로 TFTP, SNMP, 실시간 인터넷 방송들이 이에 해당한다. UDP Flooding은 UDP의 비연결성 및 비신뢰성 때문에 공격이 용이한 방법이다. UDP는 source address와 source port를 spoofing 하기 쉽다. 이러한 약점들을 이용해 과다한 트래픽을 victim에 전송함으로써 spoof가 되는 victim간 네트워크를 마비시킨다. <그림>에 나타낸 바와 같이 공격자가 victim A에게 source IP address를 victim B의 IP address로 spoofing하여 대량의 UDP 패킷을 전송하면 victim A와 victim B는 계쏙해서 서로 패킷을 주고받게 되어 두 시스템 사이의 네트워크에 과부하가 초래된다. 이 공격은 주로 echo와 chargen 서비스를 이용한다.


ICMP Protocol

신뢰성을 제공해주지 못하는 IP Protocol 통신 환경에서 발생할 수 있는 문제에 대한 Feedback을 제공하기 위해 설계되었다. 따라서, 프로토콜 컨트롤을 위해 다양한 형태의 메시지를 포함하고 있다. 그 중 잘못된 서비스 Port로 UDP 패킷이 전달 되었을 때 발생되는 ICMP Destination Port Uncreachable 메시지는 UDP Flooding 공격과 밀접한 관련이 있다.


보통 UDP storm attack 이라 불리는데, UDP 서비스 중에 echo/chargen을 이용하여, 시스템을 다운시키는 공격이다. 이것들을 이용하여 공격을 받는 경우가 많고, 또한 실제로 echo/chargen service는 별로 이용되는 일이 없기 때문에 시스템에서 제거하는 편이 좋다. 제거하는 방법은 /etc/services 와 /etc/inetd.conf 파일에서 echo, chargen을 제거한 후에 inetd 수퍼서버를 다시 띄우는 것이다.

Snap1.bmp

'scrap' 카테고리의 다른 글

ICMP Flooding  (0) 2010.03.19
SYN Flooding  (0) 2010.03.19
Denial Of Service  (0) 2010.03.19
dt 명령어  (0) 2010.03.18
명령어1  (0) 2010.03.18

'scrap' 카테고리의 다른 글

SYN Flooding  (0) 2010.03.19
UDP Flooding  (0) 2010.03.19
dt 명령어  (0) 2010.03.18
명령어1  (0) 2010.03.18
명령어2  (0) 2010.03.18

typedef struct _CHILD_RESULT
{
 DWORD dwDepth;
 LPVOID  lpLeftContext;
 LPVOID  lpRightContext;
}CHILD_RESULT, *PCHILD_RESULT;

typedef struct _CHECK_RESULT
{
 DWORD    dwFlags;
 DWORD    dwCheckResult;
 CHILD_RESULT  stChildResult;
 TCHAR    szResult[SZ_MAXSIZE];
 LPVOID    lpContext;
}CHECK_RESULT, *PCHECK_RESULT;


1) 구조체 형태 파악하기

0:000> dt _CHECK_RESULT
WinDbg_dt_test!_CHECK_RESULT
   +0x000 dwFlags          : Uint4B
   +0x004 dwCheckResult    : Uint4B
   +0x008 stChildResult    : _CHILD_RESULT
   +0x014 szResult         : [1024] Wchar
   +0x814 lpContext        : Ptr32 Void


2)구조체에 설정된 값 확인하기

0:000> dt _CHECK_RESULT 0x27f6f8
WinDbg_dt_test!_CHECK_RESULT
   +0x000 dwFlags          : 1
   +0x004 dwCheckResult    : 4
   +0x008 stChildResult    : _CHILD_RESULT
   +0x014 szResult         : [1024]  "Check_WinDBG_dt_Command function call"
   +0x814 lpContext        : (null)


2-1)구조체 값 확인하기 (심볼이 설정되었을때)

0:000> dt stChkResult
Local var @ 0x27f6f8 Type _CHECK_RESULT
   +0x000 dwFlags          : 1
   +0x004 dwCheckResult    : 4
   +0x008 stChildResult    : _CHILD_RESULT
   +0x014 szResult         : [1024]  "Check_WinDBG_dt_Command function call"
   +0x814 lpContext        : (null)


3) 구조체 특정 필드 확인하기 
0:000> dt _CHECK_RESULT dwCheckResult
WinDbg_dt_test!_CHECK_RESULT
   +0x004 dwCheckResult : Uint4B


3-1)구조체 특정 필드 값 확인하기 
0:000> dt _CHECK_RESULT dwCheckResult 0x27f6f8
WinDbg_dt_test!_CHECK_RESULT
   +0x004 dwCheckResult : 4
0:000> dt _CHECK_RESULT stChildResult 0x27f6f8
WinDbg_dt_test!_CHECK_RESULT
   +0x008 stChildResult : _CHILD_RESULT


4) 구조체 내에 있는 구조체 값 확인하기

0:000> dt _CHILD_RESULT 0x27f6f8+0x008
WinDbg_dt_test!_CHILD_RESULT
   +0x000 dwDepth          : 0
   +0x004 lpLeftContext    : (null)
   +0x008 lpRightContext   : (null)


5) 구조체에 있는 모든 값 나열(펼처서)해서 보기
0:000> dt -r _CHECK_RESULT 0x27f6f8
WinDbg_dt_test!_CHECK_RESULT
   +0x000 dwFlags          : 1
   +0x004 dwCheckResult    : 4
   +0x008 stChildResult    : _CHILD_RESULT
      +0x000 dwDepth          : 0
      +0x004 lpLeftContext    : (null)
      +0x008 lpRightContext   : (null)
   +0x014 szResult         : [1024]  "Check_WinDBG_dt_Command function call"
   +0x814 lpContext        : (null) 

'scrap' 카테고리의 다른 글

UDP Flooding  (0) 2010.03.19
Denial Of Service  (0) 2010.03.19
명령어1  (0) 2010.03.18
명령어2  (0) 2010.03.18
명령어3  (0) 2010.03.18

1) 커널의 모든 구조체 나열 : dt nt!_* (dt는 data type의 약자이고, nt는 윈도우 nt를 말하는게 아닐런지...ㅎㅎㅎ)

2) 커널의 특정 구조체 나열(인터럽트 관련) : dt nt!_*interrupt*

3) 특정 구조체의 구조 보기 : dt nt!_ktrap_frame

4) 특정 구조체 내의 하부 구조체까지 보는 명령 : dt nt!_ktrap_frame -r

5) 커널 내의 모든 스택 정보 보기 : !stacks 0

6) 시스템에 로드된 디바이스 드라이버 나열 : lm t n(lm은 list module의 약자 인듯...)


7) 전체 IDT(Interrupt Dispatch Table) 나열 : !idt -a

8) 빈번히(?) 호출된 interrupt 나열 : !idt => 어떤 빈도로 나열되는지 모르겠음.


9) 인터럽트 컨트롤러 나열 : !pic, !apic(작동 안함???)

10) io pic(programmable interrupt controller) 나열 : !ioapic


--------------------------------------- crash 분석 ---------------------------------------------------------

11) !analyze -v : 분석 결과 보기

12) kb : crash 당시의 커널 call stack 보기

13) !process -1 0 : crash 당시의 수행 중이던 프로세스

     !process -1 7 : crash 당시의 수행 중이던 프로세스의 상세 정보 출력(7이 상세 정보 출력 옵션임)

     - !process 0 0 : crash 당시의 가상메모리에 load 되어 있던 모든 프로세스(마지막이 0 flag 이므로, 간략히 출력 옵션임)

     - !process [process 시작주소] : 프로세스 관련 상세 정보 출력,

                                                   위의 커맨드로 시작주소를 알 수 있음.

     - 출력 정보 설명 :

        PROCESS : 프로세스의 정보가 들어있는 EPROCESS Block의 주소

        Cid : 프로세스 ID

        Peb : Process Environment Block 의 주소

        ParentCid : 부모 프로세스 ID

        Image : 프로세스 이름


14) !vm : crash 당시의 가상 메모리 사용 내역 요약 및 프로세스 리스트

15) !poolused : crash 당시의 커널 paged&nonpaged pool list

     - !poolused 2 : nonpaged pool 할당량 별로 정렬 후 출력

     - !poolused 4 : paged pool 할당량 별로 정렬 후 출력

16) !thread [thread 시작주소] : !process [process시작주소]를 하면 프로세스에 포함된 thread의 정보가

                                           나와서 확인 가능함.

     - 출력 정보 설명 : teb(thread environment block 시작 주소)

17) !locks : crash 당시 resource lock 정보

18) !handle : crash 당시에 open된 handle 정보 나열

     !handle [프로세스주소] : 해당 프로세스가 소유한 핸들을 출력함

     !handle [프로세스주소] f

19) !stack [프로세스주소] : 프로세스 관련 Stack 정보를 보여줌


--------------------------------------- hang 분석 ------------------------------------------------------

1) !analyze -hang -v : hang 분석을 해줌


--------------------------------------- !analyze -v 해석 ------------------------------------------------------

덤프에 따라, 일부 값은 안 나올수도 있음.


-v(verbose)  옵션은 상세 결과를 출력하게 함


1) FAULTING_IP : fault가 발생했을 때의 명령의 포인터 값

2) BUGCHECK_STR : 발생한 BUGCHECK을 설명하는 문장임.

                               BUGCHECK은 주로 커널 모드 fault와 연관이 있음.

3) DEFAULT_BUCKET_ID : 현재의 fault가 어떤 범주의 fault에 속하는지를 알려줌

4) LAST_CONTROL_TRANSFER : 스택에서 이뤄진 마지막 두 함수 호출을 보여준다.

                                               이들 주소에 ln 명령을 사용하면, 마지막 함수를 확인 가능함.

                                               (ln [주소] : 주소가 나타내는 심볼을 표시함)

5) STACK_TEXT : 스레드의 전체 스택 트레이스를 보여준다.

6) STACK_COMMAND : fault를 유발한 스레드의 stack trace를 구하기 위해 실행된 명령을 보여준다.

                                  ; 는 구분자임.

6) FOLLOWUP_IP : fault를 유발했을 가능성이 가장 큰 명령을 보여줌

7) SYMBOL_NAME : fault가 발생한 심볼의 이름을 보여줌

                              nt!ExDeferredFreePool+540 으로 나오는 것은 심볼이름이 아님. 주소를 나타냄

                              Private Symbol 이 없기 때문에 해당 주소의 구체적인 함수명 같은 심볼을 안 보여줌

                              (MS만 볼 수 있음)

8) FOLLOWUP_NAME : 이 fault를 누가 사후 점검해야 하는지를 나타냄

                                  보통 MachineOwner가 많음

9) IMAGE_NAME : fault가 발생한 이미지의 이름을 나타냄

10) MODULE_NAME : fault를 보이는 모듈의 이름을 나타냄

                              (lmvm [모듈명] 으로 조회 가능)

11) BUCKET_ID : fault가 속하는 문제의 범주를 보여줌

11) FOLLOW_UP : 이 fault에 가장 알맞은 소유자를 보여준다. 소유자를 찾을수 없다면 디폴트인 MachineOwner가 됨.


[출처] windbg 명령어 정리|작성자 난이


'scrap' 카테고리의 다른 글

Denial Of Service  (0) 2010.03.19
dt 명령어  (0) 2010.03.18
명령어2  (0) 2010.03.18
명령어3  (0) 2010.03.18
명렁어4  (0) 2010.03.18

아래 3가지 옵션을 이용하면 보다 많은 정보를 쉽게 확인 할 수 있습니다.

-V : 레지스터 또는 버추얼 메모리 주소 값을 보여 줍니다.

-t : 각 로컬 변수의 data type을 보여 줍니다.

-i : local, global, parameter, function, or unknown 등의 정보를 보여 줍니다.


적용예

1: kd> dv -V -t -i

prv param  b60b6b20 @ebp+0x08 void * P = 0x86558908

prv param  b60b6b24 @ebp+0x0c unsigned long TagToFree = 0

prv local  b60b6b24 @ebp+0x0c struct _EPROCESS * ProcessBilled = 0x00000000

prv local  b60b6b0c @ebp-0x0c unsigned long Tag = 0xb60b6b8d

prv local  b60b6b14 @ebp-0x04 _POOL_TYPE EntryPoolType = PagedPool (1)

prv local  b60b6b08 @ebp-0x10 unsigned long BigPages = 0x805bc066

prv local  b60b6b00 @ebp-0x18 _POOL_TYPE PoolType = NonPagedPool (0)

prv local  b60b6af0 @ebp-0x28 struct _KLOCK_QUEUE_HANDLE LockHandle = struct _KLOCK_QUEUE_HANDLE

prv local  b60b6b20 @ebp+0x08 unsigned long Combined = 0x86558908


로컬 변수인지 또는 파라미터 인지 보여주고 주소값이 나와서 값을 확인해 볼수 있다.


최근에 알게된 Tip을 하나 소개 합니다.

1)특정 콜스택 프레임으로 이동

1: kd> .frame 12

12 013bf554 65e931e8 ipnathlp!NatpDeletePortBlock+0x48


2) 로컬 변수와 파라미터 값 확인

1: kd> dv -V -t

013bf55c @ebp+0x08 struct _NAT_PORT_RESERVATION * PortReservation = 0x0013d1f0

013bf560 @ebp+0x0c struct _NAT_PORT_BLOCK * PortBlock = 0x02f75988

013bf544 @ebp-0x10 struct _IO_STATUS_BLOCK IoStatus = struct _IO_STATUS_BLOCK

013bf54c @ebp-0x08 struct tcp_blockports_request Request = struct tcp_blockports_request


//dt 명령어로 값을 확인했다.

1: kd> dt _NAT_PORT_RESERVATION 0x0013d1f0

ipnathlp!_NAT_PORT_RESERVATION

   +0x000 TcpipHandle      : 0x00000da8

   +0x004 BlockSize        : 0x20

   +0x006 PortBlockSize    : 0x18

   +0x008 PortBlockList    : _LIST_ENTRY [ 0x2f75988 - 0x12b7f8 ]


//dt 명령어로 값을 확인했다.

1: kd> dt _NAT_PORT_BLOCK 0x02f75988

ipnathlp!_NAT_PORT_BLOCK

   +0x000 Link             : _LIST_ENTRY [ 0x12c050 - 0x13d1f8 ]

   +0x008 StartHandle      : 0x1389

   +0x00c Bitmap           : _RTL_BITMAP

   +0x014 BitmapBuffer     : [0] 0


3) ?? 명령으로 특정 로컬 변수값 확인

1: kd> ?? Request  -> (?? 명령어로 확인할수 있는줄 몰랐다, 꼭 dt만 사용해야 하는줄 알았다.)

struct tcp_blockports_request

   +0x000 ReservePorts     : 0

   +0x004 NumberofPorts    : 0x1389

   +0x004 StartHandle      : 0x1389 a 0n5001

'scrap' 카테고리의 다른 글

dt 명령어  (0) 2010.03.18
명령어1  (0) 2010.03.18
명령어3  (0) 2010.03.18
명렁어4  (0) 2010.03.18
명령어5  (0) 2010.03.18

kd> .symfix e:\symbols

kd> .reload
Connected to Windows XP 2600 x86 compatible target, ptr64 FALSE
Loading Kernel Symbols
........................
Loading User Symbols

lm 을 사용하여 심볼이 로드된 상태를 봅니다.

kd> lm
start    end        module name
804d9000 806ede00   nt         (pdb symbols)          e:\symbols\ntoskrnl.pdb\8592B6763F344B562\ntoskrnl.pdb
806ee000 80701d80   hal        (deferred)            
f9871000 f988b580   Mup        (deferred)   
f996f000 f998e780   fltMgr     (deferred)
...

nt 는 심볼이 로드된 것이 보이는데 나머지는 deferred 라고 나옵니다.
이것은 WinDbg 의 lazy symbol loading (deferred symbol loading) 이라는 특징 때문에 그렇습니다.

WinDbg 는 심볼을 로드할 때 꼭 필요한 심볼만 올려놓고 나머지는 deferred 로 해놓고 심볼을 올리지 않습니다. deferred 로 된 녀석들은 나중에 해당 모듈이 WinDbg 상에서 실제 사용되는 순간이 발생해야만 로드가 됩니다. 필요한 것만 그때 그때 올려주는 나름대로 효율적인 방법입니다. ^^

WinDbg Help 에 보면 .reload 는 다양한 옵션을 가지고 있는데요.
제가 유용하게 사용하는 것만 몇가지 설명합니다.

.reload /i mydrv.sys (심볼이 맞지않아도 강제로 심볼 로드하기)

예를 들어 어제 빌드한 드라이버가 BSOD 를 발생시켜서 덤프가 만들어 졌는데 심볼은 보관하지 않아서 덤프분석을 할 수 없는 문제를 만났다고 가정합시다. 다행히도 어제 소스 코드를 그대로 보관하고 있었다고 하면 그것을 그대로 빌드하여 pdb 파일을 생성할 수 있습니다. 문제는 이 pdb 파일을 로드하려고 해도 WinDbg가 TimeStamp 등을 체크하여 symbol mismatch 에러를 내면서 심볼로드를 하지 않는다는 겁니다. 이런 경우에 심볼이 맞는지 확인하지 말고 강제로 올려달라는 /i 옵션을 사용하면 심볼이 올라갑니다.

.reload /f (심볼 모두 올리기)

보통 lazy symbol loading 상태로 그냥 사용하시면 되지만 혹시 모든 모듈의 심볼을 모두 올려 놓아야 할 경우가 있다면 /f 옵션을 사용해서 모든 모듈의 심볼을 올릴 수 있습니다.

.reload /u (심볼 모두 내리기)

반대로 모든 심볼을 모두 내려야 할 경우가 있다면 /u 옵션을 사용해서 모든 모듈의 심볼을 내릴 수 있습니다.

.reload /u mydrv.sys (특정모듈 심볼 내리기)

mydrv.pdb 를 로드하여 사용하고 있는데 새로 빌드한 mydrv.pdb 를 심볼패스에 복사하면 mydrv.pdb 가 사용중이라서 복사가 실패합니다. 이런 경우 /u mydrv.sys 옵션을 줘서 특정 모듈의 심볼만 내릴 수 있습니다.

.reload mydrv.sys (특정모듈 심볼 로드하기)

위와 같이 내려진 특정 모듈의 심볼만 다시 올리려면 mydrv.sys 처럼 모듈 이름을 줘서 로드합니다.


로드된 모듈 리스트 보기
 lm 명령을 이용하면 된다.

lm k : Kernel Mode 모듈 표시
lm u : User Mode 모듈 표시
lm m : 패턴을 검사하여 해당하는 것만 보여줌 <lm m my*>

lkd> lm
start    end        module name
00c80000 00c90000   NateOnHook40u   (export symbols)       C:\Program Files\NATEON\BIN\NateOnHook40u.dll
00cb0000 00cb9000   MgHookDll C (export symbols)       C:\Program Files\LG Software\On Screen Display\MgHookDll.dll
01000000 0106a000   windbg     (pdb symbols)          D:\Symbol\WebSymbol\windbg.pdb\D6EF677AA54441279479F0307F05A8941\windbg.pdb
016a0000 01784000   ext        (export symbols)       C:\Program Files\Debugging Tools for Windows\winext\ext.dll
01790000 017c1000   kext       (pdb symbols)          D:\Symbol\WebSymbol\kext.pdb\6B643FC4E9F94FF4ABA4CEF1FD6F89D61\kext.pdb


모듈의 심볼(Symbol) 검사
 x 모듈!패턴 을 입력하면 된다.

lkd> x nt!Ke*
804f8c02 nt!KeQuerySystemTime = <no type information>
804f8c9e nt!KeEnableInterrupts = <no type information>
80500e38 nt!KeSwitchKernelStack = <no type information>
804fad32 nt!KeReadStateProcess = <no type information>
804f9188 nt!KeReleaseInterruptSpinLock = <no type information>


데이터 타입(Date Type) 표시
 dt 데이터 타입 을 입력하면 된다.

lkd> dt _EPROCESS
   +0x000 Pcb              : _KPROCESS
   +0x06c ProcessLock      : _EX_PUSH_LOCK
   +0x070 CreateTime       : _LARGE_INTEGER
   +0x078 ExitTime         : _LARGE_INTEGER
   +0x080 RundownProtect   : _EX_RUNDOWN_REF
   +0x084 UniqueProcessId  : Ptr32 Void
   +0x088 ActiveProcessLinks : _LIST_ENTRY
   +0x090 QuotaUsage       : [3] Uint4B
   +0x09c QuotaPeak        : [3] Uint4B
   +0x0a8 CommitCharge     : Uint4B



메모리 덤프(Memory Dump)
 d* 명령들을 이용하면 된다.

db : Byte 형식 + Ascii 로 표시
dd : 데이터를 4Byte 형식으로 표시

lkd> db 8053db18
8053db18  8b ff 55 8b ec 8b 45 08-8b 4d 0c 8b 55 14 89 48  ..U...E..M..U..H
8053db28  0c 8b 4d 10 89 48 10 03-ca 89 48 14 8b 4d 18 83  ..M..H....H..M..
8053db38  c1 fe 89 48 18 8b 4d 1c-89 48 20 66 8b 4d 20 66  ...H..M..H f.M f



디스어셈블리(Disassembly)
 u 주소 를 이용하면 된다. 특정 함수를 디스어셈블리 하고 싶으면 uf 주소 를 하면 된다.

u 주소 : 주소에서 일부분만 디스어셈블리
u 주소1 주소2 : 주소1에서 주소 2까지 디스어셈블리

lkd> u 8053db18 or uf nt!NtOpenProcess
nt!KeInitializeProfile:
8053db18 8bff             mov     edi,edi
8053db1a 55               push    ebp
8053db1b 8bec             mov     ebp,esp
8053db1d 8b4508           mov     eax,[ebp+0x8]
8053db20 8b4d0c           mov     ecx,[ebp+0xc]


메모리 영역 속성 보기(VA Dump)
 !vadump 명령을 사용하면 된다. 만약 특정 메모리의 속성을 보고 싶다면 !vprot 주소 명령을 사용하면 된다.

0:000> !vadump
BaseAddress:       00000000
RegionSize:        00010000
State:             00010000  MEM_FREE
Protect:           00000001  PAGE_NOACCESS

BaseAddress:       00010000
RegionSize:        00001000
State:             00001000  MEM_COMMIT
Protect:           00000004  PAGE_READWRITE
Type:              00020000  MEM_PRIVATE


0:000> !vprot 30c191c
BaseAddress: 030c1000
AllocationBase: 030c0000
AllocationProtect: 00000080 PAGE_EXECUTE_WRITECOPY
RegionSize: 00011000
State: 00001000 MEM_COMMIT
Protect: 00000010 PAGE_EXECUTE
Type: 01000000 MEM_IMAGE


프로세스 관련
 모든 프로세스를 보기위해서는 !process 0 0 를 입력하면 된다. 디버거를 특정 프로세스에 붙이고 싶으면 .process /i [pid] 를 입력하면 된다.


lkd> !process 0 0
**** NT ACTIVE PROCESS DUMP ****
PROCESS 8a3a3490  SessionId: none  Cid: 0004    Peb: 00000000  ParentCid: 0000
    DirBase: 00780000  ObjectTable: e1001c70  HandleCount: 521.
    Image: System

PROCESS 8a184158  SessionId: none  Cid: 03f0    Peb: 7ffdd000  ParentCid: 0004
    DirBase: 17a40020  ObjectTable: e163dd70  HandleCount:  20.
    Image: smss.exe

PROCESS 89df4da0  SessionId: 0  Cid: 0440    Peb: 7ffd5000  ParentCid: 03f0
    DirBase: 17a40040  ObjectTable: e1c6cb18  HandleCount: 626.
    Image: csrss.exe


구조체 내용 보기

!strct _KMUTANT ff93a330

이렇게 명령을 주면 자료구조랑 값들이 같이 출력이 된다.


WinDBG 디버깅 과정 파일로 저장하기

Windbg를 이용해서 디버깅을 하다보면,

디버깅과정을 저장할 필요가 생깁니다.
또는 아래와 같은 상황이 있을수 있을겁니다.


- 다른분의 도움을 통해 디버깅한 내용을 참고하고 싶은경우
- 수십시간동안 켜놓은 결과를 저장해야하는경우. -> 화면 버퍼를 넘어가면 그동안의  내용이 사라지죠~
- .cls 를 습관적으로 사용하는경우.    -> 제경우입니다. T.T

이때 유용한 명령어가 바로.

.logxxx 계열 명령어입니다.


.logopen logfile
    >> 디버깅 과정을 저장할 로그파일 명을 지정합니다.
          ex) .logopen “c:\dbglog\logs.txt”

.logfile
    >> 현재 기록중인 디버깅 로그파일의 상태를 표시합니다.

.logclose
    >> 기록중이던 로그를 종료(완료)합니다.



유용하게 쓰세요~
(단, .logopen 이전의 내용은 저장되지 않습니다.` ^^)
참고하세요)
.logopen 정보 역시 Windbg WorkSpace 에 함께 저장됩니다.~ ^^


출처 : 다년간의 프로그래밍 경험 및 구글 search 결과

[출처] WinDBG 명령어 정리|작성자 갱주니

'scrap' 카테고리의 다른 글

명령어1  (0) 2010.03.18
명령어2  (0) 2010.03.18
명렁어4  (0) 2010.03.18
명령어5  (0) 2010.03.18
명령어6  (0) 2010.03.18

1.심볼(pdb), 소스 파일 설정하기

(WinDbg에서 심볼은 필요할 때 로드한다. 즉 지연해서 로드한다.)

ld [심볼이름] -> 강제로 심볼 로드하는 명령어

lm -> 현재 로드 되어있는 모듈 보여준다. 지연 되어 있으면 (deffered)라고 나온다.

.reload-> 심볼다시로드


2.| (process status)

3.~ (thread status)

4.변수 확인하기

.frame 1

dv(display variable)

5.dt r (typecast) (address)

(dt -r int 0x0012f5bc)

6.wt-> 모든 함수를 계층적으로 보여주는 명령어

7.브레이크 포인트

bp -> 주소를 이용해서 설정

bu -> 심볼이름을 이용해서 설정

(bu 060630_WinDbgTest!CWinDbgTestDlg::OnBnClickedButton1)

bl -> 브레이크 포인트 리스트

be (breakpoint enable), bd(breakpoint disable)

bc (breakpoint clear)

ba -> 메모리 액세스 브레이크 포인트

8.!critsec (임계섹션 주소), !locks(잠겨진 모든 임계섹션 주소 확인), !handle(프로세스내의 핸들 정보 표시)

'scrap' 카테고리의 다른 글

명령어2  (0) 2010.03.18
명령어3  (0) 2010.03.18
명령어5  (0) 2010.03.18
명령어6  (0) 2010.03.18
C++ Project Templete Create  (0) 2010.03.18

1)!vm 명령을 사용해서 현재 컴퓨터의 메모리 사용량을 살펴 보았습니다.


kd> !vm

*** Virtual Memory Usage ***
Physical Memory:   655234   ( 2620936 Kb)
Page File: \??\C:\pagefile.sys
   Current:   2095104Kb Free Space:   1999612Kb
   Minimum:   2095104Kb Maximum:      4190208Kb
Available Pages:   130442   (  521768 Kb)
ResAvail Pages:    577917   ( 2311668 Kb)
Modified Pages:       749   (    2996 Kb)
NonPagedPool Usage: 65522   (  262088 Kb)
NonPagedPool Max:   69378   (  277512 Kb)
********** Excessive NonPaged Pool Usage *****
PagedPool 0 Usage:   4025   (   16100 Kb)
PagedPool 1 Usage:    416   (    1664 Kb)
PagedPool 2 Usage:    414   (    1656 Kb)
PagedPool 3 Usage:    416   (    1664 Kb)
PagedPool 4 Usage:    411   (    1644 Kb)
PagedPool Usage:     5682   (   22728 Kb)
PagedPool Maximum:  86016   (  344064 Kb)
Shared Commit:        978   (    3912 Kb)


현재 !vm 명령을 통해서 NonPagedPool 메모리를 거의 다 사용한 것을 알 수 있습니다. 아마 특정 디바이스 드라이버 모듈에서 메모리를 많이 사용하는 것 같습니다.


2) !poolused 명령어를 사용해서 각각 메모리 할당 내용을 살펴 봅니다.

0: kd> !poolused
   Sorting by  Tag

  Pool Used:
            NonPaged            Paged
 Tag    Allocs     Used    Allocs     Used
 1394        1      520         0        0UNKNOWN pooltag '1394', please update pooltag.txt
 1MEM        1     3368         0        0UNKNOWN pooltag '1MEM', please update pooltag.txt
 2MEM        1     3944         0        0UNKNOWN pooltag '2MEM', please update pooltag.txt
 3MEM        3      248         0        0UNKNOWN pooltag '3MEM', please update pooltag.txt
 8042        4     3944         0        0PS/2 kb and mouse , Binary: i8042prt.sys
 AGP         1      344         2      384UNKNOWN pooltag 'AGP ', please update pooltag.txt
 AcdN        2     1072         0        0TDI AcdObjectInfoG 
 AcpA        3      192         1      504ACPI Pooltags , Binary: acpi.sys
 AcpB        0        0         4      576ACPI Pooltags , Binary: acpi.sys
 AcpD       40    13280         0        0ACPI Pooltags , Binary: acpi.sys
 AcpF        6      240         0        0ACPI Pooltags , Binary: acpi.sys
 AcpM        0        0         1      128ACPI Pooltags , Binary: acpi.sys
 AcpO        4      208         0        0ACPI Pooltags , Binary: acpi.sys

...

 WmiG       30     6960         0        0Allocation of WMIGUID 
 WmiR       63     4032         0        0Wmi Registration info blocks 
 Wmip      146     3504       182    18600Wmi General purpose allocation 
 Wmit        1     4096         7    49480Wmi Trace 
 Wrpa        2      720         0        0WAN_ADAPTER_TAG 
 Wrpc        1       72         0        0WAN_CONN_TAG 
 Wrpi        1      120         0        0WAN_INTERFACE_TAG 
 Wrps        2      128         0        0WAN_STRING_TAG 
 aEoP        1      672         0        0UNKNOWN pooltag 'aEoP', please update pooltag.txt
 fEoP        1       16         0        0UNKNOWN pooltag 'fEoP', please update pooltag.txt
 hSVD        0        0         1       40Shared Heap Tag , Binary: mrxdav.sys
 hibr        0        0         1    24576UNKNOWN pooltag 'hibr', please update pooltag.txt
 iEoP        1       24         0        0UNKNOWN pooltag 'iEoP', please update pooltag.txt
 idle        2      208         0        0Power Manager idle handler 
 jEoP        1       24         0        0UNKNOWN pooltag 'jEoP', please update pooltag.txt
 mEoP        1       88         0        0UNKNOWN pooltag 'mEoP', please update pooltag.txt
 ohci        1      136         0        01394 OHCI host controller driver 
 rx..       3     1248         0        0UNKNOWN pooltag '  rx', please update pooltag.txt
 sidg        2       48         0        0GDI spooler events 
 thdd        0        0         1    20480DirectDraw/3D handle manager table 
 SeSd      18    77056         2       96UNKNOWN pooltag 'SeSd', please update pooltag.txt
 vPrt        0        0        18    68160UNKNOWN pooltag 'vPrt', please update pooltag.txt
 TOTAL     3570214 209120008     38769 13066104

usbp 태그를 사용하는 모듈이 Nonpaged를 많이 사용하고 있습니다. 


3)!poolfind를 이용해서 특정 태그 메모리 사용내역을 확인해 봅니다.

kd> !poolfind SeSd 0

Scanning large pool allocation table for Tag: SeSd (827d1000 : 827e9000)

Searching NonPaged pool (823b1000 : 82800000) for Tag: SeSd

826fa130 size:   c0 previous size:   40  (Allocated) SeSd
82712000 size:   c0 previous size:    0  (Allocated) SeSd
82715940 size:   a0 previous size:   60  (Allocated) SeSd
8271da30 size:   c0 previous size:   10  (Allocated) SeSd
82721c00 size:   10 previous size:   30  (Free)      SeSd
8272b3f0 size:   60 previous size:   30  (Allocated) SeSd
8272d770 size:   60 previous size:   40  (Allocated) SeSd
8272d7d0 size:   a0 previous size:   60  (Allocated) SeSd
8272d960 size:   a0 previous size:   70  (Allocated) SeSd
82736f30 size:   a0 previous size:   10  (Allocated) SeSd
82763840 size:   a0 previous size:   10  (Allocated) SeSd
8278b730 size:  100 previous size:  290  (Allocated) SeSd
8278b830 size:   10 previous size:  100  (Free)      SeSd
82790130 size:   a0 previous size:   20  (Allocated) SeSd
82799180 size:   a0 previous size:   10  (Allocated) SeSd
827c00e0 size:   a0 previous size:   30  (Allocated) SeSd
827c8320 size:   a0 previous size:   60  (Allocated) SeSd
827ca180 size:   a0 previous size:   50  (Allocated) SeSd
827ec140 size:   a0 previous size:   10  (Allocated) SeSd

Searching NonPaged pool (fe7c3000 : ffbe0000) for Tag: SeSd

위 결과를 보니 메모리 할당(Allocated)된 만큼 해제(free)를 하지 않고 있는것 같습니다. 메모리 릭(memory leak)이 발생한것 같습니다.


4) Tag 이름으로 문제를 발생하고 있는 드라이버 찾기

WinDbg에서 태그로 이름으로 드라이버를 찾는 명령어를 제공하지 않는것으로 알고 있습니다.

그래서 저는 www.dumpanaysis.org 사이트에 나와있는 방법으로 찾습니다. 


직접 C:\windows\system32\drivers 드라이버 폴더에 찾는다. (cmd.exe)

C:\windows\system32\drivers>findstr /S /m /l hSeSd *.sys


출처 : 다년간의 프로그램밍 경험 및 http://www.dumpanalysis.org

'scrap' 카테고리의 다른 글

명령어3  (0) 2010.03.18
명렁어4  (0) 2010.03.18
명령어6  (0) 2010.03.18
C++ Project Templete Create  (0) 2010.03.18
LinkError 추적하기  (0) 2010.03.18

안녕하세요 신경준입니다. 어제는 날씨가 여름처럼 덥던데 오늘은 비가올려고 하는지 좀 서늘하네요. 일교차가 심한데 감기 걸리지 않게 조심하세요


 WinDbg에서 제가 생각할때 가장 많이 사용하는 명령어를 간단하게 정리했습니다.


[Debugger Setup : 심볼 설정]

 .sympath : 심볼 경로를 설정하는 명령어입니다.

 .sympath SRV*f:\localsymbols*http://msdl.microsoft.com/download/symbols


 .srcpath : source 경로를 설정하는 명령어 입니다. 

 .srcpath+ \\buildmachine\workspace\project\srt


 .lsrcpath : local 컴퓨터에 있는 source 경로를 설정하는 명령어 입니다.

 .lsrcpath+ c:\workspace\project\src 


 .lines : 디버깅 할때 소스 라인 정보를 보여주거나 보여주지 않게 설정한다.

 .lines -d (disable show source information)

 .lines -e (enable show source information)


 lm : 로드되어있는 모듈 정보를 알아본다.

s이름으로 시작하는 모듈의 정보를 알아낸다.

kd> lm m s*
start    end        module name
f9f73000 f9f7fd80   sysaudio     (deferred)                
fa04b000 fa09b400   srv          (deferred)                
faab7000 faac8500   sr           (deferred)                
facac000 facbae00   serial       (deferred)                
fb008000 fb00ba80   serenum      e:\mysymbols\SereEnum.pdb\.......
fb24f000 fb250000   swenum       (deferred)                

Unloaded modules:
f9f53000 f9f61000   swmidi.sys
fb0ae000 fb0b0000   splitter.sys
fb040000 fb043000   Sfloppy.SYS


!sym noisy 시끄러운 심볼을 로드한다.(이상한 심볼을 로드한다.)

!sym noisy Activates noisy symbol loading. 소란스러운 심볼을 로드하고 적용한다.

!sym quiet Deactivates noisy symbol loading. 소란스러운 심볼을 언로드하고 적용 해제한다.


 

.enable_unicode 1 : 디버깅 과정중에 unicode 스트링을 보여 줄수 있도록한다.

dt 명령어는 물론 Locals window and the Watch window. 에 있는 유니코드도 주소값 또는 hex 값이 아닌 스트링이 보여진다.


x 심볼을 조사해 본다.(Examine Symbols)

아래 명령어 예제는 prymes모듈에서 __n으로 시작하는 함수를 모두 보여주고 해당 심볼의 데이타 타입도 보여주라는 명령어이다.
0:001> x /t prymes!__n*
00427d84 char * myModule!__nullstring = 0x00425de8 "(null)"
0042a3c0 int myModule!_nstream = 512
Type information missing error for _nh_malloc
004021c1 struct MyStruct myModule!MyStructInstance = struct MyStruct
00427d14 <NoType> myModule!_NLG_Destination = <no type information>

'scrap' 카테고리의 다른 글

명렁어4  (0) 2010.03.18
명령어5  (0) 2010.03.18
C++ Project Templete Create  (0) 2010.03.18
LinkError 추적하기  (0) 2010.03.18
SVN 사이트  (0) 2010.03.18

Create a Visual C++ Wizard for Visual Studio 2005

  • http://www.codeguru.com/cpp/v-s/devstudio_macros/customappwizards/article.php/c12775__1/

    Visual Studio C++ Project Templete 만들기 

  • Creating the Project

    To create a new wizard project, go to File > New > Project and select Visual C++, and then from the list of available templates customwiz. Let's call this project "DummyWin32Wizard", because after all, that's exactly what it is. You will be asked to select the settings for this project. First, put "DummyWin32Wizard" in the "Wizard Friendly Name" edit, check the "User Interface" checkbox, and set the number of pages of the wizard to 1, because that's all what we'll need.

    When the project is created, it will have several created files that you can see in the following picture. The most important ones are described here:

    get_image.png 

'scrap' 카테고리의 다른 글

명령어5  (0) 2010.03.18
명령어6  (0) 2010.03.18
LinkError 추적하기  (0) 2010.03.18
SVN 사이트  (0) 2010.03.18
Visual Studio 단축키  (0) 2010.03.18

짜증나는 워닝과 에러 중에,헤더파일 순서에 따라 발생하는 워닝/에러가 있습니다.특히 링크타임에 나는 에러는 네이밍 모양새가 재밌게 생겨먹지 않은 스타일로 생기는 데다가 링커가 별로 힌트를 주지 않아서 짜증이 나기도 합니다.예를 들면 아래와 같은 겁니다.


1>Generating Code...

1>Compiling resources...

1>Microsoft (R) Windows (R) Resource Compiler Version 6.1.6723.1

1>Copyright (C) Microsoft Corporation. All rights reserved.

1>Compiling manifest to resources...

1>Microsoft (R) Windows (R) Resource Compiler Version 6.1.6723.1

1>Copyright (C) Microsoft Corporation. All rights reserved.

1>Linking...

1>uafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) already defined in LIBCMTD.lib(new.obj)

1>uafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) already defined in LIBCMTD.lib(dbgdel.obj)


위 예는 MFC프로젝트에서 모든 파일에서 MFC헤더를 다른 헤더 보다 먼저 선언해야 하는데(대부분 stdafx.h를 가장 상위에 선언합니다.), MFC프로젝트에서 사용하던 파일을 Import하고 컴파일 하는 순간 발생했습니다.


이런 에러의 경우 대처법은 의외로 간단 합니다.일단 똑똑고 기억력 좋으신 분들은 자기가 했던 행위들의 콜스택을 하나하나 거슬러 올라가시면서 대처 하는법이 있고,이게 가장 비용대비 시간단축 효가가 가장 좋습니다.


순간 욱해서 콜스택 거슬러 올라가기 힘드신 (저 같은;;)분들은 아래처럼 대처 하시면 됩니다.먼저 링커 옵션에 아래 옵션을 추가 합니다.


/verbose:lib


http://blogfiles4.naver.net/data42/2009/3/23/163/verbose_drvoss.jpg



그리고 다시 빌드 하면 링킹타임에 library를 스캔하는 리스트가 아래와 같이 output창에 나오게 됩니다.


1>Generating Code...

1>Compiling resources...

1>Microsoft (R) Windows (R) Resource Compiler Version 6.1.6723.1

1>Copyright (C) Microsoft Corporation. All rights reserved.

1>Compiling manifest to resources...

1>Microsoft (R) Windows (R) Resource Compiler Version 6.1.6723.1

1>Copyright (C) Microsoft Corporation. All rights reserved.

1>Linking...

1>Searching libraries

1>   Searching C:\Program Files\Microsoft Visual Studio 9.0\VC\lib\DelayImp.lib:

1>   Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\uuid.lib:

1>   Searching C:\Program Files\Microsoft Visual Studio 9.0\VC\lib\LIBCMTD.lib:

1>   Searching C:\Program Files\Microsoft Visual Studio 9.0\VC\lib\OLDNAMES.lib:

1>   Searching C:\Program Files\Microsoft Visual Studio 9.0\VC\atlmfc\lib\uafxcwd.lib:

1>uafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) already defined in LIBCMTD.lib(new.obj)

1>uafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) already defined in LIBCMTD.lib(dbgdel.obj)

1>   Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\kernel32.lib:

1>   Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\user32.lib:

1>   Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\gdi32.lib:

1>   Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\uuid.lib:


윗 예에서 uafxcwd.lib를 링크 할 때,링크에러가 났고,에러를 유발한 유력한 용의자는 uuid.lib입니다.왜냐면,계속 다른 애들은 디폴트 경로에서 링크되는데 uuid.lib sdk에서 링크 되었고, MFC에서 new를 재정의 하기 때문에,이전에 new가 정의되어 있는 파일이 링크되면 안됩니다.여기서 “stdafx.h”파일을 추가 하는 것을 잊었구나 하는 생각이 듭니다.


/verbose옵션을 써보지 않으신 분들은 한번 넣고 컴파일을 해보시면 쓰잘떼기 없는 정보까지 주르륵 나와서 놀라실 껍니다.여러가지 링킹 타임에 하는 작업 정보를 자세히 알려주는 것을 알 수 있습니다.윗예의 :lib처럼 뒷부분에 세부 옵션을 붙여 보기 좋게 정보를 추출하는 작업이 익숙해 지면 일반적인 컴파일시 정보를 잘 제공해주지 않는 링킹 타임시 발생하는 에러에 정보를 얻어 디버깅 작업 시간을 단축 시킬 수 있습니다.

'scrap' 카테고리의 다른 글

명령어6  (0) 2010.03.18
C++ Project Templete Create  (0) 2010.03.18
SVN 사이트  (0) 2010.03.18
Visual Studio 단축키  (0) 2010.03.18
증분링크  (0) 2010.03.18

1. http://www.assembla.com/
이곳은 가입해보니 무료 사용자는 소스를 오픈해야만 하더군요.
바로 다른 곳을 알아보았습니다.

2. http://unfuddle.com/
소스를 오픈하지 않아도 된다길래
잽싸게 가입하고 소스 올리고,
친구를 프로젝트 팀원으로 등록하려고 보니..
무료 이용자는 팀원을 2명까지만 등록할 수 있네요...

3. http://ffhosting.net/
여기는 국내 사이트입니다.
무료 계정을 신청한 사람이 svn을 신청하면
세팅해 주고 사용할 수 있게 해준다고 합니다.
그런데 다른 사이트들은 프로젝트 관리 페이지를 제공하는데
(인원, 비용, task, bug tracking 등)
이곳은 그냥 서버만 제공하는것 같네요.

4. http://www.xp-dev.com/
그래서 다시 검색하다가 이곳을 알아냈습니다.
여러명 함께 사용할수 있고 기본 용량 500MB에
앞서 말했듯이 프로젝트 관리 페이지와 토론방, 게시판 등을 사용할 수 있네요.
프로젝트는 공개/비공개를 선택할 수 있고...

SVN 으로 소스 관리하시려는 분들은 참고하세요~

'scrap' 카테고리의 다른 글

C++ Project Templete Create  (0) 2010.03.18
LinkError 추적하기  (0) 2010.03.18
Visual Studio 단축키  (0) 2010.03.18
증분링크  (0) 2010.03.18
윈도우 가상 드라이버 생성  (0) 2010.03.18

+ Recent posts