웹&컴퓨팅

ActiveX 취약점 여전히 강세

x2chi 2008. 3. 13. 10:06
반응형
마이크로소프트사는 총 2개의 패치를 2008년 01월 정기보안 업데이트에 포함하여 발표하였다. 이중 위험등급이 긴급(critical)인 패치의 개수와 중요(important)인 패치의 개수는 각 1개이다. 2008년 01월에 발표된 패치의 개수(2개)는 2007년 평균 수치보다 작은 수치로 다른 달과 비교하여 봤을 때 많지 않은 개수이다. [표 2-1]은 2008년 01월 발표된 취약점의 목록 및 공격 코드 공개 여부이다.

위험등급 취약점 PoC
긴급 Windows TCP/IP의 취약점으로 인한 원격 코드 실행 문제점(941644)
중요 LSASS의 취약점으로 인한 로컬 권한 상승 문제점(943485)

[표 2-1] 2008년 1월 마이크로 소프트 정기 보안 패치


아직까지 취약점에 대한 공격코드는 공개되지는 않았지만 발표된 취약점 모두 코드 실행이 가능하거나 관리자 권한의 획득이 가능한 취약점이기 때문에 반드시 마이크로 소프트에서 제공하는 보안 업데이트를 설치하여 운영체제나 관련 제품의 상태를 항상 최신의 것으로 유지하도록 해야 한다.

Windows TCP/IP의 취약점

Microsoft Windows에 내장된 TCP/IP Stack에서 IGMP 프로토콜 및 MLDv2의 특정 패킷을 처리하는 과정에서 특정 메시지 타입의 필드 길이를 올바르게 확인하지 않아 버퍼 오버플로우가 발생하게 된다. 또한 ICMP 프로토콜의 특정 패킷을 처리하는 과정에서 필드 길이를 올바르게 확인하지 않아 서비스 거부 취약점이 존재한다. 이러한 TCP/IP는 네트워크 데이터를 전송하는데 사용되는 인터넷의 핵심 프로토콜이며, Microsoft Windows에서는 tcpip.sys로 TCP/IP 스택을 운영체제하에 구현하고 있다.

간략하게 해당 프로토콜의 정보를 설명해보면 다음과 같다.
    ● IGMP(Internet Group Management Protocol): 단일 전송자와 다수의 수신자 간의 통신에 사용되는 멀티캐스트 프로토콜이며, IPv4 시스템에서는 IP 멀티캐스팅 그룹 구성원을 이웃된 멀티캐스트 라우터에 전송하는데 사용된다. 이 IGMP Version 3에 대한 자세한 정보는 RFC 3376에 정의되어 있다.

    ● MLD(Multicast Listener Discovery): IPv6 용 서브넷 멀티캐스트를 구성하는데 이용되며, ICMP(Internet Control Message Protocol)은 호스트와 게이트웨이 간에 연결 상태 및 메시지 제어 등에 사용되는 프로토콜이며, 자세한 내용은 RFC 792에 정의되어 있다.


취약점이 발생하는 원인을 살펴보기 전에 IGMP의 주요 메시지 타입을 살펴보면 다음과 같다.

#define IGMP_MEMBERSHIP_QUERY 0x11 /* membership query */
#define IGMP_V1_MEMBERSHIP_REPORT 0x12 /* Ver. 1 membership report */
#define IGMP_V2_MEMBERSHIP_REPORT 0x16 /* Ver. 2 membership report */
#define IGMP_V2_LEAVE_GROUP 0x17 /* Leave-group message */
#define IGMP_V3_MEMBERSHIP_REPORT 0x22 /* Ver. 3 membership report */

 
사용자 삽입 이미지

[그림 2-14] IGMP v3 Membership Query Message


위 메시지 타입 중 하나인 Membership Query(0x11) 메시지를 이용하는 특정 패킷을 처리하는 과정에서 특정 필드의 길이 값을 체크하지 않아서 커널 버퍼 오버플러우가 발생하게 된다. 또한 조각난(Fragmented) ICMP 라우팅 타입(0x09) 패킷을 처리하는 과정에서 해당 타입의 특정 필드를 윈도우 커널의 TCP/IP 스택이 길이 값을 체크하지 않아서, 서비스 거부 현상이 발생하게 된다. 이 취약점은 원격에서 코드를 실행할 수 있는 취약점이 존재하는 것으로, 공격자는 윈도우 커널을 서비스 거부 공격 하거나, 시스템을 제어할 수 있는 모든 권한을 얻을 수 있게 된다. 단 TCP/IP 스택은 커널 드라이버 형태로 내장되어 있으며, 서비스 거부공격은 BSOD(Blue Screen Of Death) 형태로 나타난다.

위 취약점은 원격 공격이 가능하고, 커널에서 발생하는 취약점이므로 웜으로 만들어지면 강력한 웜 형태가 될 것이다. 그러므로 각별히 보안 패치를 빠른 시일 안에 해야 할 것이다.

ActiveX 취약점 여전히 강세

 
사용자 삽입 이미지

[그림 2-15] Milw0rm Remote Attack 1월 통계


공격 코드인 Exploit을 실시간으로 제공해주는 Milworm에 올라온 1월 Remote Attack(Web 또는 Dos 공격을 제외한)을 살펴 봤을 때 1월 총 35건 중 25건인 71% 정도가 ActiveX를 이용한 공격 코드인 것으로 나타났다. 보안 패치가 되지 않은 제로데이 공격코드 또한 존재하여 더욱더 위험성이 뒤따른다.

공개된 ActiveX Exploit 25건 중 14건인 56%가 버퍼 오버플로우 공격 형태를 띄고 있으며, 나머지 공격들은 대부분 Remote Command Execution 형태인 것으로 나타났다. 이러한 ActiveX 취약점은 특이하게, 로컬에서 동작하면서 Remote Attack을 할 수 있다는 특징을 가지고 있다. Web을 통해 ActiveX 함수를 컨트롤 할 수 있기 때문에 쉽게 접근이 가능하고, 불특정 다수를 상대로 공격 할 수 있는 특징을 가지고 있다. 이러한 특징 때문에 외국에서는 이러한 ActiveX 취약점들을 하나로 묶어 판매를 하고 있으며, 이렇게 묶어진 패키지를 사용하여 악성 코드를 전파하는 수단으로 사용되고 있다.

1월 취약점 중 두 가지 형태의 ActiveX를 통해 실제 어떤 형태로 공격이 이루어지는지 살펴보도록 하자.

사용자 삽입 이미지


이러한 ActiveX를 막기 위해서 프로그래머의 입장과 일반 클라이언트의 입장을 살펴보면 다음과 같다.

ActiveX를 개발하는 프로그래머는 특정 함수를 공격자 또한 사용할 수 있다는 걸 미리 염두 해 두어야 한다. 그렇기 때문에 어떠한 Command 명령을 실행하는 형태의 함수들은 특별히 조심해고, 가급적 사용을 하지 말아야 할 것이다. 또한 문자열 길이 값을 확인하고, 문제가 발생할 수 있는 함수들인 strcpy, strcat … 함수들 대신 strncpy, strncat … 처럼 길이 값을 확인할 수 있는 형태의 함수들을 사용하고, 개발 할 때 Security Cookie나 메모리 관련 보호 메커니즘 사용을 권장한다.

일반 사용자의 경우 불필요한 ActiveX는 설치하지 않으며, 주기적으로 사용하지 않는 ActiveX는 삭제 또는 사용불가 처리를 해야 한다. 또한 보안 프로그램을 설치/업데이트 하여, 공격자가 심어 놓은 Html 형태의 공격 코드를 미리 차단해야 하며, ActiveX로 설치되는 프로그램 업데이트가 됐을 경우 반드시 업데이트를 하며, 업데이트 되지 않는 ActiveX는 Internet Explorer에서 "도구"->"인터넷 옵션"->"프로그램"->"추가 기능 관리"->특정 ActiveX "사용 안 함" 으로 처리 또는 "도구"->"인터넷 옵션"->"설정"->"개체 보기"에서 특정 ActiveX를 선택하여 삭제해야 한다.

[출처] 안철수연구소 ASEC
반응형