2008.10.10

윈도우98 이후 10년의 기록 '최악의 취약점들' ①

Andrew Brandt | InfoWorld

1998년 6월 25일과 2008년 6월 30일은 윈도우 OS의 진화에서 획기적이라 할 수 있는 윈도우 95에서 윈도우 98로의 전환, 다소 매끄럽진 않았지만 XP에서 비스타로의 전환이 일어난 날이다.

 

그 사이에 놓인 3,659일 동안 또 다른 종류의 달갑지 않은 진화가 있었으니 ‘종의 기원’이라 할 만큼 급속도로 출현해 윈도우를 취약성에 노출시켜온 버그들이 바로 그것이다.

 

많은 사람들에게 윈도우의 취약점을 찾아 악용하는 일은 하나의 오락이었고 또 이보다 더 많은 사람들에게는 직업이었다. 업계는 알려지지 않은 취약점으로부터 윈도우 이용자들을 보호하느라 진땀을 흘렸고, 한편으로 맬웨어는 유치한 장난으로부터 수익을 노리는 범죄적 기업 차원으로 발달해갔다.

 

아무 죄도 없는 PC 이용자들과 곤경에 처한 IT 관리자들이 이 그칠 줄 모르는 공격의 한가운데 자리하고 있다. MS를 비롯한 소프트웨어 업계 전체가 나서 제로-데이 익스플로잇을 해결하고, 잠재적 보안 문제 보고를 위한 프로토콜을 개발하는 등의 부단한 노력을 했음에도 불구하고 사소한 윈도우 버그 하나가 어마어마한 보안 문제를 시킨 사례가 몇 차례 있었다.

 

이들 오류는 수백만 개의 코드 라인 속에 묻힌 채 거대 기업들을 조정하고 부의 흐름을 뒤바꾸기도 했다. 이제는 이들을 돌아보고 마땅한 평가를 내릴 시간인 듯 하다. 여기서는 윈도우 98 도입 이후 감내해야 했던 최악의 취약점들을 소개하겠다.  

 

패스워드, ‘패스워드’가 보다 더 안전했을 텐데……

버그 식별기호: VCE-2000-0979, MS00-072

설명: ‘공유 레벨 패스워드’ 취약점

별칭: 윈도우 9x 공유 패스워드 우회(Windows 9x share password bypass)

발표일: 2000. 10.10

 

윈도우 9x에서는 패스워드로 보호되는 공유(a share)라고도 알려진 미니 파일 서버를 PC에서 호스트할 수 있도록 하는 재치 있는 작은 구상을 도입했다. 아이디어는 단순하다. 네트워크로 연결된 이용자들이 파일을 안전하게 호스팅 및 공유하자는 것이다. MS는 이의 보안을 위해 허술한 자물쇠 하나를 장치했는데 이내 무용지물로 드러났다.  

 

메타스플로이트 프레임워크 프로젝트(the Metasploit Framework project)의 책임자였던 취약성 전문가인 H.D. 무어는 “넷바이오스 공유(NetBios share)에 대한 인증 요청을 처리할 때 윈도우 95/98는 전송된 패스워드의 길이를 파악한 다음, 오로지 바이트 수만을 실제 패스워드와 비교한다"고 말했다.

 

따라서 패스워드를 전혀 알지 못하더라도 “0바이트의 패스워드를 지정하도록 하여 공유로의 액세스가 가능해진다"고 무어는 설명했다.

 

이어 “진짜 심각한 것은 길이를 늘리며 모든 글자를 시도해 공유 패스워드를 서버로부터 얻을 수 있다는 것”이라고 덧붙였다.

 

결론 : 윈도우 95/98 파일 및 프린트 공유를 위한 패스워드 인증 체계는 보안 장치라 하기에도 무색한 것이었다. 거의 아무런 노력 없이 간단히 통과할 수 있는 수준이었기 때문이다.

 

폴더 탐색(Folder traversal): 하나의 URL로 전체 서버 제어

버그 식별기호: MS00-078

설명: 웹 서버 폴더 탐색 취약점

별칭: 디렉터리 탐색 버그(Directory traversal bug)

발표일: 2000. 10. 17.

 

지난 십 년간의 MS 패치들에서 배운 한 가지 사실이라면 모든 사람들이 이들 패치들을 꼬박꼬박 설치하지는 않는다는 것이다. MS가 이 보안 공지를 발표했을 때만 해도 해당 문제를 보완하는 패치(MS00-057)는 이미 2달 전에 발표된 상태였다.

 

MS 파일 시스템의 레이아웃을 알고 있다면(어떤 폴더가 어디에 있는지) 이 버그를 이용해 웹 서버에 명령을 전송함으로써 전적인 제어가 가능해진다.

 

누가 얼마만큼 윈도우 컴퓨터를 이용했는지 알 수 있으므로 문서가 어떤 폴더 경로로 이동하고 애플리케이션은 대개 어떤 폴더 경로에 배치되는지 등 하드 드라이브에서 경로를 찾기가 그다지 어렵지 않다.

 

단순한 규칙 몇 가지와 윈도우의 체계화 방식을 알고 있다면 URL 안에 점과 백슬래시(또는 이들의 유니코드)를 사용하면서 파일 시스템 전체를 탐색하고 명령을 실행할 수 있다. IIS계정 승인은 다소 제한적이라도 연관 취약점을 이용해 특권을 상향할 수 있어 원격 이용자는 단지 몇 가지 URL만 전송하면 윈도우 서버를 마음대로 조정할 수 있다.  

 

무어에 따르면 “이는 패킷스톰 포럼(PacketStorm forums)에서 익명 게시물로 처음 발견되었으며 2년 가까이 윈도우 웹 서버들을 취약성에 노출시켰다”고 한다.

 

결론 : 디렉토리 탐색 버그는 특정 URL만 호출하면 부정한 작업을 가능케 해주는 자동화 공격의 새 시대를 열었다.

 

코드 레드: 치명적인 버그

버그 식별기호: MS01-033

설명: 인덱스 서버 ISAPI(Internet Sever API) 익스텐션에서의 검사되지 않은 버퍼에 의해 웹 서버가 위험에 노출될 수 있음

별칭: 코드 레드 버그(The Code Red bug)

발표일: 2001. 6. 18.

 

MS 웹 서버에서 대량 데이터를 전송하면 어떻게 될까? 2001년 여름이었다면 해당 네트워크를 소유하게 됐을 것이다. 적어도 MS가 IIS 웹 서버용의 애매한 이름의 패치를 공개한 후 1달여까지는 그러했다.

 

이 버그의 특성은 간단하다. IIS 서버 하나를 택해 버퍼 오버플로우를 유발하여 명령이 시스템 메모리의 다른 부분으로 침투하게 한다. 명령은 시스템 자체의 컨텍스트에서 발생했으므로 서버 운영의 사실상 모든 부분이 취약성에 노출된다.

 

그리고 이의 확산은 전무후무한 규모로 발생했다. 2001년 7월 13일 금요일 오후 이아이 디지털 시큐리티(eEye Digital Security)의 보안 엔지니어들은 고객 네트워크에서 급속히 확산 중인 웜에 대한 보고를 받았다. 마크 메이프렛과 라이언 퍼메는 토요일 하루를 할애해 이 웜을 리버스 엔지니어링한 후 이를 세상에 알렸다.

 

이 웜은 취약성 있는 IIS 서버를 탐지해 이를 감염시키고 100개의 자체 쓰레드를 생성한다. 이후 이들은 다른 컴퓨터로 확산되어 간다. 만약 일정 월의 20일에서 말일까지의 기간이라면 www.whitehouse.gov.에서 데이터를 쏟아낸다. 퍼메와 메이프렛은 이 웜이 하루에 50만개 정도의 고유 IP 주소를 감염시킬 수 있는 것으로 추정했다.

 

결론 : 코드 레드는 MS의 패치가 나오는 즉시 이를 적용하는 것의 중요성을 일깨워주었다. 패치 자체가 멀웨어 제작자들에게 새로운 취약성을 어디서 찾아야 하는지 정확히 알려주는 실마리가 되기 때문이다.

 

지금까지의 가장 빠른 감염 속도

버그 식별기호: MS02-039

설명: SQL 서버 2000 확인 서비스(SQL Server 2000 Resolution Service)의 버퍼 오버런에 의해 원격 코드 실행을 가능케 함

별칭: SQL 슬래머 버그(The SQL Slammer bug)

발표일: 2002. 7. 24.

 

SQL 슬래머 버그는 엄밀히 말해 OS 버그로 볼 순 없지만 취약 시스템을 감염시키는 속도 측면에서 언급할만한 가치가 있다. 이 버그는 MS의 데이터베이스 서버를 표적으로 한다. 취약 컴퓨터는 버퍼 오버플로우의 대상이 되며, 적절히 조작되기만 하면 메모리에 명령을 상주시켜 표적 시스템에서 데이터베이스 서비스 승인과 함께 이들 명령을 실행하도록 한다.

 

MS02-039 패치를 실행하려면 이전 패치가 설치되어 있어야 하므로 이를 패치하는 일은 복잡한 편이다. 이 버그는 기본적으로 기업 서버 시스템에 영향을 주지만 MSDE(Microsoft SQL Server Desktop Engine)가 설치된 일반 가정에도 역시 영향을 준다. 시스템에 MSDE가 설치된 사실조차 모르는 사람들을 포함해 다수의 일반 가정에서는 영문도 알지 못한 채 고스란히 피해를 입었다.

 

슬래머 웜은 기본적으로 데이터베이스를 운영하는 서버를 표적으로 하기 때문에 수백만 대의 시스템을 감염시키지는 않았다. 하지만 이 웜은 2003년 1월 25일 릴리즈된지 10분 만에 10대의 취약 머신 중 거의 9대를 감염시키는 놀라운 속도를 보여주었다. 이 웜은 376바이트에 불과해 1개의 데이터 패킷에 알맞은 크기이다.

 

주니퍼 네트웍스의 상임 보안 연구 책임자인 스티브 만주익은 MS02-039버그는  ‘사상 최대의 과실 중 하나’였다면서 “찾기 쉽고 명백했기 때문이 아니라 오히려 그 반대였다”고 말했다.

 

그러면서 “패치를 만들 때 UDP포트에서 취약 SQL 설치물이 모두 탐지되어 악용될 수 있다는 사실을 아무도 알아차리지 못했고 다수 관리자들이 UDP는 내버려둔 채 SQL TCP 포트로의 액세스만을 차단했다”고 설명했다.

 

CAIDA(Cooperative Association for Internet Data Analysis)의 분석기사에 따르면 이 웜은 효율성의 전형이라 할만한 버그로서 감염 시스템의 수를 8.5초마다 배로 늘리고, 인터넷은 수 많은 감염 시도로 넘쳐나 라우터들이 작용을 멈춰버린다. 라우터가 재시작되면 라우팅 테이블을 동시에 업데이트하게 되므로 정상적 트래픽은 이러한 정체 구간을 통과할 수 없게 된다.

 

결론 : SQL 슬래머는 하나의 데이터 패킷 크기의 사소한 취약성이 얼마나 강할 수 있는지를 보여주었다. 그리고 애플리케이션이 하나라도 취약하면 전체 인터넷이 멈춰버릴 수 있다는 사실도 함께 배웠다. 이 웜은 아직도 유효한 채로 남아 일부 구형 시스템을 표류하며 새로운 숙주를 찾고 있다.



2008.10.10

윈도우98 이후 10년의 기록 '최악의 취약점들' ①

Andrew Brandt | InfoWorld

1998년 6월 25일과 2008년 6월 30일은 윈도우 OS의 진화에서 획기적이라 할 수 있는 윈도우 95에서 윈도우 98로의 전환, 다소 매끄럽진 않았지만 XP에서 비스타로의 전환이 일어난 날이다.

 

그 사이에 놓인 3,659일 동안 또 다른 종류의 달갑지 않은 진화가 있었으니 ‘종의 기원’이라 할 만큼 급속도로 출현해 윈도우를 취약성에 노출시켜온 버그들이 바로 그것이다.

 

많은 사람들에게 윈도우의 취약점을 찾아 악용하는 일은 하나의 오락이었고 또 이보다 더 많은 사람들에게는 직업이었다. 업계는 알려지지 않은 취약점으로부터 윈도우 이용자들을 보호하느라 진땀을 흘렸고, 한편으로 맬웨어는 유치한 장난으로부터 수익을 노리는 범죄적 기업 차원으로 발달해갔다.

 

아무 죄도 없는 PC 이용자들과 곤경에 처한 IT 관리자들이 이 그칠 줄 모르는 공격의 한가운데 자리하고 있다. MS를 비롯한 소프트웨어 업계 전체가 나서 제로-데이 익스플로잇을 해결하고, 잠재적 보안 문제 보고를 위한 프로토콜을 개발하는 등의 부단한 노력을 했음에도 불구하고 사소한 윈도우 버그 하나가 어마어마한 보안 문제를 시킨 사례가 몇 차례 있었다.

 

이들 오류는 수백만 개의 코드 라인 속에 묻힌 채 거대 기업들을 조정하고 부의 흐름을 뒤바꾸기도 했다. 이제는 이들을 돌아보고 마땅한 평가를 내릴 시간인 듯 하다. 여기서는 윈도우 98 도입 이후 감내해야 했던 최악의 취약점들을 소개하겠다.  

 

패스워드, ‘패스워드’가 보다 더 안전했을 텐데……

버그 식별기호: VCE-2000-0979, MS00-072

설명: ‘공유 레벨 패스워드’ 취약점

별칭: 윈도우 9x 공유 패스워드 우회(Windows 9x share password bypass)

발표일: 2000. 10.10

 

윈도우 9x에서는 패스워드로 보호되는 공유(a share)라고도 알려진 미니 파일 서버를 PC에서 호스트할 수 있도록 하는 재치 있는 작은 구상을 도입했다. 아이디어는 단순하다. 네트워크로 연결된 이용자들이 파일을 안전하게 호스팅 및 공유하자는 것이다. MS는 이의 보안을 위해 허술한 자물쇠 하나를 장치했는데 이내 무용지물로 드러났다.  

 

메타스플로이트 프레임워크 프로젝트(the Metasploit Framework project)의 책임자였던 취약성 전문가인 H.D. 무어는 “넷바이오스 공유(NetBios share)에 대한 인증 요청을 처리할 때 윈도우 95/98는 전송된 패스워드의 길이를 파악한 다음, 오로지 바이트 수만을 실제 패스워드와 비교한다"고 말했다.

 

따라서 패스워드를 전혀 알지 못하더라도 “0바이트의 패스워드를 지정하도록 하여 공유로의 액세스가 가능해진다"고 무어는 설명했다.

 

이어 “진짜 심각한 것은 길이를 늘리며 모든 글자를 시도해 공유 패스워드를 서버로부터 얻을 수 있다는 것”이라고 덧붙였다.

 

결론 : 윈도우 95/98 파일 및 프린트 공유를 위한 패스워드 인증 체계는 보안 장치라 하기에도 무색한 것이었다. 거의 아무런 노력 없이 간단히 통과할 수 있는 수준이었기 때문이다.

 

폴더 탐색(Folder traversal): 하나의 URL로 전체 서버 제어

버그 식별기호: MS00-078

설명: 웹 서버 폴더 탐색 취약점

별칭: 디렉터리 탐색 버그(Directory traversal bug)

발표일: 2000. 10. 17.

 

지난 십 년간의 MS 패치들에서 배운 한 가지 사실이라면 모든 사람들이 이들 패치들을 꼬박꼬박 설치하지는 않는다는 것이다. MS가 이 보안 공지를 발표했을 때만 해도 해당 문제를 보완하는 패치(MS00-057)는 이미 2달 전에 발표된 상태였다.

 

MS 파일 시스템의 레이아웃을 알고 있다면(어떤 폴더가 어디에 있는지) 이 버그를 이용해 웹 서버에 명령을 전송함으로써 전적인 제어가 가능해진다.

 

누가 얼마만큼 윈도우 컴퓨터를 이용했는지 알 수 있으므로 문서가 어떤 폴더 경로로 이동하고 애플리케이션은 대개 어떤 폴더 경로에 배치되는지 등 하드 드라이브에서 경로를 찾기가 그다지 어렵지 않다.

 

단순한 규칙 몇 가지와 윈도우의 체계화 방식을 알고 있다면 URL 안에 점과 백슬래시(또는 이들의 유니코드)를 사용하면서 파일 시스템 전체를 탐색하고 명령을 실행할 수 있다. IIS계정 승인은 다소 제한적이라도 연관 취약점을 이용해 특권을 상향할 수 있어 원격 이용자는 단지 몇 가지 URL만 전송하면 윈도우 서버를 마음대로 조정할 수 있다.  

 

무어에 따르면 “이는 패킷스톰 포럼(PacketStorm forums)에서 익명 게시물로 처음 발견되었으며 2년 가까이 윈도우 웹 서버들을 취약성에 노출시켰다”고 한다.

 

결론 : 디렉토리 탐색 버그는 특정 URL만 호출하면 부정한 작업을 가능케 해주는 자동화 공격의 새 시대를 열었다.

 

코드 레드: 치명적인 버그

버그 식별기호: MS01-033

설명: 인덱스 서버 ISAPI(Internet Sever API) 익스텐션에서의 검사되지 않은 버퍼에 의해 웹 서버가 위험에 노출될 수 있음

별칭: 코드 레드 버그(The Code Red bug)

발표일: 2001. 6. 18.

 

MS 웹 서버에서 대량 데이터를 전송하면 어떻게 될까? 2001년 여름이었다면 해당 네트워크를 소유하게 됐을 것이다. 적어도 MS가 IIS 웹 서버용의 애매한 이름의 패치를 공개한 후 1달여까지는 그러했다.

 

이 버그의 특성은 간단하다. IIS 서버 하나를 택해 버퍼 오버플로우를 유발하여 명령이 시스템 메모리의 다른 부분으로 침투하게 한다. 명령은 시스템 자체의 컨텍스트에서 발생했으므로 서버 운영의 사실상 모든 부분이 취약성에 노출된다.

 

그리고 이의 확산은 전무후무한 규모로 발생했다. 2001년 7월 13일 금요일 오후 이아이 디지털 시큐리티(eEye Digital Security)의 보안 엔지니어들은 고객 네트워크에서 급속히 확산 중인 웜에 대한 보고를 받았다. 마크 메이프렛과 라이언 퍼메는 토요일 하루를 할애해 이 웜을 리버스 엔지니어링한 후 이를 세상에 알렸다.

 

이 웜은 취약성 있는 IIS 서버를 탐지해 이를 감염시키고 100개의 자체 쓰레드를 생성한다. 이후 이들은 다른 컴퓨터로 확산되어 간다. 만약 일정 월의 20일에서 말일까지의 기간이라면 www.whitehouse.gov.에서 데이터를 쏟아낸다. 퍼메와 메이프렛은 이 웜이 하루에 50만개 정도의 고유 IP 주소를 감염시킬 수 있는 것으로 추정했다.

 

결론 : 코드 레드는 MS의 패치가 나오는 즉시 이를 적용하는 것의 중요성을 일깨워주었다. 패치 자체가 멀웨어 제작자들에게 새로운 취약성을 어디서 찾아야 하는지 정확히 알려주는 실마리가 되기 때문이다.

 

지금까지의 가장 빠른 감염 속도

버그 식별기호: MS02-039

설명: SQL 서버 2000 확인 서비스(SQL Server 2000 Resolution Service)의 버퍼 오버런에 의해 원격 코드 실행을 가능케 함

별칭: SQL 슬래머 버그(The SQL Slammer bug)

발표일: 2002. 7. 24.

 

SQL 슬래머 버그는 엄밀히 말해 OS 버그로 볼 순 없지만 취약 시스템을 감염시키는 속도 측면에서 언급할만한 가치가 있다. 이 버그는 MS의 데이터베이스 서버를 표적으로 한다. 취약 컴퓨터는 버퍼 오버플로우의 대상이 되며, 적절히 조작되기만 하면 메모리에 명령을 상주시켜 표적 시스템에서 데이터베이스 서비스 승인과 함께 이들 명령을 실행하도록 한다.

 

MS02-039 패치를 실행하려면 이전 패치가 설치되어 있어야 하므로 이를 패치하는 일은 복잡한 편이다. 이 버그는 기본적으로 기업 서버 시스템에 영향을 주지만 MSDE(Microsoft SQL Server Desktop Engine)가 설치된 일반 가정에도 역시 영향을 준다. 시스템에 MSDE가 설치된 사실조차 모르는 사람들을 포함해 다수의 일반 가정에서는 영문도 알지 못한 채 고스란히 피해를 입었다.

 

슬래머 웜은 기본적으로 데이터베이스를 운영하는 서버를 표적으로 하기 때문에 수백만 대의 시스템을 감염시키지는 않았다. 하지만 이 웜은 2003년 1월 25일 릴리즈된지 10분 만에 10대의 취약 머신 중 거의 9대를 감염시키는 놀라운 속도를 보여주었다. 이 웜은 376바이트에 불과해 1개의 데이터 패킷에 알맞은 크기이다.

 

주니퍼 네트웍스의 상임 보안 연구 책임자인 스티브 만주익은 MS02-039버그는  ‘사상 최대의 과실 중 하나’였다면서 “찾기 쉽고 명백했기 때문이 아니라 오히려 그 반대였다”고 말했다.

 

그러면서 “패치를 만들 때 UDP포트에서 취약 SQL 설치물이 모두 탐지되어 악용될 수 있다는 사실을 아무도 알아차리지 못했고 다수 관리자들이 UDP는 내버려둔 채 SQL TCP 포트로의 액세스만을 차단했다”고 설명했다.

 

CAIDA(Cooperative Association for Internet Data Analysis)의 분석기사에 따르면 이 웜은 효율성의 전형이라 할만한 버그로서 감염 시스템의 수를 8.5초마다 배로 늘리고, 인터넷은 수 많은 감염 시도로 넘쳐나 라우터들이 작용을 멈춰버린다. 라우터가 재시작되면 라우팅 테이블을 동시에 업데이트하게 되므로 정상적 트래픽은 이러한 정체 구간을 통과할 수 없게 된다.

 

결론 : SQL 슬래머는 하나의 데이터 패킷 크기의 사소한 취약성이 얼마나 강할 수 있는지를 보여주었다. 그리고 애플리케이션이 하나라도 취약하면 전체 인터넷이 멈춰버릴 수 있다는 사실도 함께 배웠다. 이 웜은 아직도 유효한 채로 남아 일부 구형 시스템을 표류하며 새로운 숙주를 찾고 있다.



X