2007년 10월 20일
Zero Day Exploit과 그 대책
Zero Day란 말을 들어본 적이 있는가? 네트워크의 보안이나 신뢰성을 위협하는 시스템의 버그나 취약성은 시스템상의 내부에서 발견된다. 하지만 발견된 문제점이 얼마 동안 어디에도 보고되지 않는 경우가 있다. 이 기간을 Zero Day라고 한다. Zero Day 기간 중에는 해당 시스템의 벤더나 유저가 해당 문제점을 알지 못하므로, 시스템 공격을 받아도 대책을 할 수 없고, 공격을 인지할 수 있는 방법도 없다.
이와 같이 무방비한 Zero Day 기간을 노린 공격을 Zero Day Exploit이라고 한다. Zero Day Exploit의 대표적인 사례는 2001년에 유행한 Nimda나 CodeRed, 2002년 여름에 유행한 Apache Web Server의 chunk 데이터 처리의 취약성을 노린 공격 등이 있다. 이런 것에 의해 큰 피해를 입은 경우는 트래픽을 필터링하는 방화벽 등의 장비에만 의존하여, 엔드 유저가 사용하는 컴퓨터에는 아무런 보안 대책을 실시하지 않는 네트워크였다. Worm을 감염시켜 심각한 피해를 받고 있는 것을 거래처나 다른 사람으로부터 연락 받아 발견한 사례도 많았다.
Zero Day Exploit을 예방하기 위해서는 단말에 최신 보안 패치를 적용하거나, 방화벽의 필터링 룰을 강화할 필요가 있다. 하지만, 이런 대책만으로는 Zero Day Exploit을 완벽하게 막을 수 없다. 예를 들어, 취약성이 존재하는 서버를 발판으로 하거나, 내부 네트워크로부터 공격하거나, 일시적인 설정상의 실수로 인해 부정 액세스를 할 수도 있다. 때문에 네트워크 관리자는 누가, 어디로부터, 어떻게 침입해 왔는가를 정확하게 검출하여 공격을 예방할 대책을 갖추어야 한다.
이와 같은 대책을 실현하기 위해서는 패킷 분석 툴이나 NIDS를 도입하는 방법이 있다. 여기에서는 공격에서부터 대책까지에 대해 간략히 알아 본다.
사전 조사로 공격 대상을 결정 – 스캐닝 툴의 사용
부정 침입을 시도하는 공격은 시스템을 본격적으로 공격하기 전에 시스템을 조사하는 행동이 반드시 수반된다. 이것은 공격자가 취약성이 존재하는 컴퓨터가 존재하는 장소와 해당 취약성을 이용할 공격 방법을 파악하기 위함이다. 이와 같은 조사는 Ping을 송신하여 네트워크의 주소 체계나 컴퓨터의 위치 관계를 파악하는 Ping스캔, 컴퓨터에 열려 있는 포트를 조사하는 포트 스캔, 컴퓨터가 제공하는 서비스의 취약성을 조사하는 서비스 스캔 등을 실시하여 이루어진다.
이런 스캔 툴에는 상용 제품에서 프리웨어까지 다종다양하지만, 일반적으로 Nmap이 가장 유명하다. Nmap은 Unix, Linux, Windows, Mac OS 등 다양한 OS에서 사용할 수 있다. 이런 툴을 사용한 포트 스캔은 대부분의 NIDS에서 검출되므로, 자신의 환경이 아닌 다른 네트워크로는 절대 실시하지 않도록 한다.
공격 대상이 결정되면 취약성을 확인한다 – 취약성 스캐너
부정 침입을 계획한 공격자는 사전 조사에 의해 공격할 대상을 결정하고 나면, 다음은 공격 대상에 취약성이 존재하는지 확인한다. 이것은 공격 툴이나 취약성 스캐너를 사용하여 확인할 수 있다. 공격 툴은 실제 시스템에 피해를 줄 수 있지만, 취약성 스캐너는 취약성의 존재유무만 판단하므로, 시스템에 영향을 주지 않는다. 그리고 취약성 스캐너를 배포하는 사이트에서도 사용하여 시스템에 이상 현상이 발생한 경우, 그 책임을 지지 않음을 명시하고 있다.
미지의 공격을 밝혀 낸다 – 네트워크 분석 툴
시스템에 대한 공격은 공격 패턴이 전부 알려져 있는 것이 아니므로, NIDS가 검출할 수 없는 것도 있다. 공격자는 끊임 없이 새로운 공격 방법을 개발하여 대책이 세워지기 전에 공격을 시도하려고 한다. 때문에 Zero Day Exploit이 성공할 가능성이 매우 높다.
이와 같이 NIDS가 검출할 수 없는 새로운 공격은 네트워크 분석 툴로 트래픽을 캡쳐하여 패킷 내용을 분석하면 된다. 네트워크 분석 툴로는 Wireshark(구 Ethereal)를 포함하여 다양하게 존재한다. 네트워크 분석 툴은 Ethernet상의 패킷을 모니터링하고, 패킷의 내용이나 통계 정보를 수치나 그래프로 표시한다.
네트워크 분석 툴의 분석 내용을 토대로 시스템을 조사하여 취약성을 발견한 경우에는 적절하게 처리할 필요가 있다. 시스템에 존재하는 취약성은 최신 패치를 적용하면 해결되는 것이 많다. 하지만, 패치 파일을 적용해도 취약성이 해결되지 않는 경우에는 다음과 같은 방법을 실시하도록 한다.
1. 서비스를 완전히 정지시킨다.
2. 소프트웨어를 다른 것으로 교체한다.
3. 인라인형 어플리케이션 소프트웨어를 사용한다.
4. 인라인형 스위치로 필터링한다.
5. 잠정적인 대책을 실시하여 운용한 후에 패치가 나올 때까지 기다린다.
1번은 가장 안심할 수 있고 확실한 대처 방법이다. 하지만, 서비스를 제공하지 못하면 비즈니스 기회를 손실하게 된다. 2~4번까지는 시스템 이행이나 도입 등의 작업이 수반되므로, 운용을 개시할 때까지 서비스를 정지하는 기간이 발생한다. 5번은 가장 위험한 방법으로, 잠정적인 대책을 실시하여 회피하는 방법도 있다.
위에서 소개한 5가지 대처 방법은 각각 리스크를 가지고 있다. 이와 같은 사태에 도달하지 않기 위해서는 보안상의 이유로 서비스를 제공할 수 없게 되는 리스크를 포함한 대책을 실시하는 것이 중요하다.
또한 IDS의 시그네처나 IPS 등 공격 방어 제품의 공격 데이터베이스에 존재하지 않는 새로운 공격 패턴을 네트워크 분석 툴로 발견한 경우에는 시그네처나 공격 데이터베이스에 반영하여 이후에는 공격으로 검출될 수 있도록 한다.
네트워크를 상시 감시하여 부정 침입을 자동 검출하는 NIDS
네트워크 분석 툴을 사용하여 트래픽을 분석하면, 공격을 시도하고 있는 컴퓨터나 공격을 받고 있는 컴퓨터를 알아낼 수 있다. 하지만, 네트워크의 모든 패킷을 네트워크 관리자가 네트워크분석 툴로 상시 감시하는 것은 현실적으로 불가능하다. 따라서 필요한 것이 NIDS이다. NIDS는 네트워크상의 패킷을 소프트웨어로 상시 감시하고, 이상한 내용의 패킷을 검출하여 관리자에게 통보한다.
NIDS의 대표적인 프리웨어는 Snort이다. Snort는 시그네처와 같은 역할을 하는 Rule파일을 토대로 이 Rule파일에 해당하는 패킷을 공격 패킷으로 판단하여 관리자에게 경고(Alert)한다. Snort와 같은 시그네처 기반 IDS는 Rule파일의 정확도가 높을수록 공격 검출 능력이 높고, 오검출이 적다. 때문에 시그네처 기반 IDS를 운용하는 경우에는 작성할 Rule파일의 내용이 중요하게 된다.
Snort를 다운로드한 시점에서의 Rule파일으로는 포트스캔도 검출하지 못한다. 따라서 텍스트 편집기를 사용하여 디폴트 설정 파일인 snort.conf을 수정할 필요가 있다. 다음 설정 예는 UDP 또는 TCP의 SYN 패킷이 3초 간 4회 다른 포트에서 검출된 경우에 포트 스캔으로서 인식한다.
preprocessor portscan: $HOME_NET 4 3 log/portscan.log
Snort에 관한 보다 자세한 정보는 해당 홈페이지나 관련 자료를 참고하기 바란다.
유지보수가 불필요한 프로토콜 이상 검출 NIDS
일반적인 NIDS는 부정한 문자열을 읽어 들여, 공격으로 검출하는 형태로 되어 있다. 하지만, 최근에는 프로토콜의 정상 값을 갖고 있지 않는 패킷을 공격 패킷으로 판단하는 방법으로 공격을 검출하는 프토토콜 이상 검출 NIDS는 이론적으로는 프로토콜 규격이 바뀌지 않는 한 새로운 공격 패턴이 출현해도 따로 해야 할 일이 없다.
공격자를 일부러 유도하는 HoneyPot으로 정보 수집
부정 침입을 시도하는 공격에 대한 정보는 IDS 외에도 HoneyPot으로도 수집할 수 있다. HoneyPot은 일부러 공격당하기 위해 의도적으로 네트워크상에 설치하는 취약성이 존재하는 시스템이다. 일부러 웹 서버를 HoneyPot으로 설치하고, 해당 서버로 들어오는 모든 액세스를 조사하는 조기 경계 시스템으로서 운용하는 경우도 많다.
# by | 2007/10/20 19:14 | Security Mind | 트랙백





☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]