Anow 2010.12.16 22:07
AmesianX// 안녕하세요 AmesianX님. 요새는 잘 지내시는지 모르겠군요.. 여기서도 뵙는군요. 친구가 알려줘서 부족하지만 답글 달아봅니다.
맞습니다. 단순한 DLL Injection 개념으로 통용되어 왔던 이 기법이 DLL Hijacking 이라고 별도로 명명되어 하나의 취약성 형태로 분류된 것은 최근임은 사실입니다. 요새는 사실 정확히는 DLL Preloading 으로 많이 쓰이지요.
저도 왜 이 기초적인, windows structure 의 맹점을 이용한 공격이 왜 2010년 중후반이 되어서야 많은 application에 이러한 취약성이 발견되었다고 글이 올라오고, exploit-db 에 local exploit 에 dll hijacking 건으로 도배가 되었는지는 잘 모를일이라 생각합니다.
허나 말씀하신 부분중에서
"~~그래서 국내에서는 오래전에 언급하고 사용하고 있어도 겉으로 드러내는 일이 없었
답니다. 그래서 언더해커들이 이런기사를 보면 기가막히고 코가막힐 노릇이 되는
거죠..~~"
부분에 의문을 던져봅니다.. 예전부터 쓰이고 있었던 skill 이 2010년 중후반이 되어서야 issue 화 되었다는 것에 대해서.. 분명히 이 취약성은 위험한 부류에 속합니다. 하지만 이 기술을 알고 있는 그 누구도 이 취약성에 대한 심각성을 강하게 주장하지 않았고, exploit 을 작성하여 발표하지도 않았던 것으로 기억합니다.. 보안이던 어떤 분야이던, "그들끼리만 알고 쓰는" 기술은 이번처럼 실제로 exploit 이 올라와 이슈화가 되기 전 까지에는 거의 문제로 삼지 않습니다.. 당연합니다. 그러한 의식이 사실 이러한 간단한 취약성에도 불구하고 critical 한 취약성을 불러일으키는 것 보다 더 심각한 것이고, 고쳐야할 부분이라고 생각합니다.
특정 응용프로그램에만 존재하는 것도 아니고, Internet Explorer를 포함한 Microsoft의 다양한 제품군, Adobe의 제품군, 파이어폭스, 사파리 등등 평소에 공격 대상이 되어오던 이러한 제품군에도 분명히 예전에도 DLL preloading 취약성이 존재했을 것이구요. 이런 유명한 제품군에서 2010년 중후반이 와서야 도미노 넘어지듯 exploit이 발표되고 공개적으로 이슈화가 되는 것, 분명히 그러한 의식이 작용했기에 초래된 문제점이라 생각합니다. 기술적인 보안 의식을 넘어서서 말입니다.
AmesianX보다 훨씬 경험이 적은 제가 감히 할말이라고는 생각되진 않지만 제 생각은 그렇습니다. 아무튼 1달이 지난 코멘트에 답글을 보실지 모르겠군요. 아무튼 2010년 12월 행복하게 잘 보내시길 바랍니다. (__) 고견 감사드립니다.
AmesianX 2010.11.02 16:23
어쩌다 DLL 인젝션에 사용하는 가장 기초적인 기술이 DLL 하이재킹이라고 해서 취약점
으로 둔갑하는 시대가 된 것인지 생각해보게 됩니다. 요즘 언급되는 DLL 하이재킹이라
부르는 대부분의 내용들을 보다보면.. 누군가는 기술을 잘 감쌀줄 아는거 같다는 생각
을 해봅니다.. 본디 MS 시스템은 유닉스 시스템하고 달리 파일을 찾는 디렉토리의
우선순위가 다르죠.. 이걸 이용해서 프로그램을 가로채는 아이디어는 이미 2006년도에
해킹포럼에서 언급했었고 이미 한참을 써오는 방식입니다..(지금도 역시 매일같이
쓰고 있죠. 저는 주로 winmm.dll 파일을 숙주로 주로 이용하고 있죠..)
제 개인적으로 시간만 따져봐도 벌써 4년이 흐른 아이디어네요..
그 이전부터 시야가 있었던 해커들은 더 오랫동안 써왔던 방식입니다.. 적어도
어림잡아 10 년이 된 이야기인데 10년 후에 거론되는 겁니다. 그동안 아무도 이런
방식을 눈여겨 보지 않았단 의미가 되는거죠.. 이 기술이 어떤류이냐면, "이렇게
프로그램 흐름을 가로채면 위험할수도 있을거 같은데? 근데 남들도 다 알고 있을거
같고 너무 당연한 거라서 말하면 개쪽당할것 같다. 그래 참자.." 에 포함되는 기술
부류입니다. 즉, 해커들 중에서 리버스 엔지니어링 기술을 보유한 사람이라면 누구나
다 알고있는 기술이라서 언급했다가 욕먹을까봐 그냥 삭히는 그런부류에 속한 거라고
할까요..?
그래서 국내에서는 오래전에 언급하고 사용하고 있어도 겉으로 드러내는 일이 없었
답니다. 그래서 언더해커들이 이런기사를 보면 기가막히고 코가막힐 노릇이 되는
거죠..
이 기술을 까발려보죠.. 왜 간단한 것인지..
요즘의 A/V(Anti-Virus) 소프트웨어들은 매우 똑똑합니다. 그래서 타 프로그램의
프로세스 공간을 열람하는 OpenProcess 같은 함수들이 사용되면 패턴감식을 통하여
잡아냅니다. 만약 악성 프로그램이 팩킹을 통해서 자기자신의 몸체를 뒤지지 못하게
하여 패턴인식을 못하게 하였다면, A/V 들은 실시간 감시로 OpenProcess 라는 타
프로그램의 공간에 접근하려는 함수를 동적으로 잡아냅니다. A/V 역시 바이러스처럼
동작을 합니다. 인간의 몸처럼..(백혈구가 인간몸의 정상세포를 공격하면 인간이
죽듯이..)
마치, 백신프로그램이 백혈구 세포들처럼 작동하는 꼴이되어 바이러스가 OpenProcess
로 프로그램(정상세포기관)의 공간을 열고 침투하는 것을 동적으로 잡아냅니다.
그래서 오늘날에는 기본적으로 모든 백신들(백혈구들)이 OpenProcess 같은 타 프로그
램 프로세스공간에 액세스하는 모든 함수들을 미리 가로챈 상태로 감시하고 있죠.
이게 A/V 라는 안티바이러스 소프트웨어 즉 백신입니다. 바이러스는 더 똑똑해져야
할 필요가 생겨버렸습니다. 다른 프로그램을 감염시키고 들키지않는 것이 녹녹치
않게 되어버렸기 때문입니다. 반드시 감염을 위해서는 파일을 열거나 프로세스 공간
을 열람해야 하기 때문입니다. 이미 파일을 열람하는 바이러스는 막강한 백신이 모두
잡아내니 프로세스공간쪽으로 옮겨 발전된 형태인데, 프로세스공간까지 이제 막히니
남은 방법은 한가지 밖에 없는 것이죠. 그렇게 발전이 될 수 밖에 없는 것이죠.
그래서 바이러스 기술은 에이즈 처럼 인간의 면역 시스템을 공략하게 된 겁니다.
바이러스라는 악성코드가 몸속에 침투하면 타 프로그램이 액세스했다는 것을 알고
면역시스템(백신)이 작동해서 바이러스를 잡아먹습니다. 그런데, 만약에 바이러스
인지 아니면 자기자신인지 구분을 못한다면 백혈구들이 바이러스를 공격할 수 있을
까요.. A/V 백신 소프트웨어들이 바이러스를 공격할 수 있을까요? 까딱 잘못하다간
얼마전에 있었던 안철수연구소가 정상세포를 잡아먹어 컴퓨터가 다운되는 그런 일이
벌어지듯 인간이 죽을수 있는 것이죠.(서로혼용해서 말하고있지만 용어의미는 같음)
즉, 바이러스나 공격기술은 면역체계를 무너뜨릴 경우(A/V 의 탐지방법을 무너뜨리는
기술) 감염에 성공할 수 있게 되는 것입니다. 그럼 면역체계를 무너뜨릴 수 있는
방법은 무엇이 있을까요.. 황우석 박사가 가장 큰 업적을 낸 것이 줄기세포를 이식
하였을때, 면역거부 반응을 우회한 것이었죠..? 이걸 컴퓨터 용어로 바꾸어 말하면,
백신프로그램이 탐지가 가능한 OpenProcess 함수나 그밖에 현재 알려진 탐지가능한
함수들을 사용하지 않고도 다른 프로세스 공간에 침투할때 탐지되지 않는 방법을
알아내었다라고 말하는 것과 정확히 같은 내용입니다. 바이러스가 다른 프로세스로
침투할때 면역거부가 생기지 않으면 감염이던 뭐던 정상세포처럼 작동해도 아무런
제재를 받지 않는다 라고 혼용언어로 말할 수도 있습니다.
지금 언급된 이 하이재킹 기술도 그런류와 동일한 겁니다. A/V 백신 소프트웨어들은
백혈구역할이며 바이러스 세포를 악성코드가 담긴 DLL 파일이라고 봅시다. 정상 프로
그램들은 정상 DLL 파일들을 갖고 있습니다. 정상세포인 셈이죠. 그런데 이 정상세포
는 LoadLibrary 라는 함수를 통해서 인식된단 말이죠.. 그런데 이 함수가 세포가 즉,
DLL 파일이 어딨는지 찾아야 로딩할 수 있는데 이때 어디서부터 찾을지 우선순위가
생긴다는 것이죠. 참고로 프로그램(exe파일)이 있는 자기자신의 디렉토리를 제일먼저
우선순위로 찾습니다. 그런데, 만약에 경로를 특별히 지정하지 않는다면 바이러스가
exe 파일과 동일한 위치에 있다라고 한다면 이름이 정상세포이름과 똑ㅤㄷㅏㅌ다면 로딩이
먼저 이루어지겠죠. 이때는 정상적인 몸의 기관이 세포를 받아들일때처럼 바이러스는
능동적으로 침투하는 것이 아닌 끌려서 들어가는 꼴이됩니다. 즉, OpenProcess 같은
류의 함수처럼 능동적으로 찢어서 열어서 침투하는게 아니라 정상처럼 속여서 수동
적으로 끌려서 들어가는 방식을 사용하는 것이죠. 이렇게 되면 매우매우 정상적인
세포의 사용과정과 같을 것이므로(프로그램적으로는 정상프로그램이 DLL 파일을 로딩
하는 구동방식과 이론상 정확하게 일치함. 구분할 방법이 딱히 없음.) 면역체계가
사용하는 OpenProcess 같은 실시간 감시기술도 무용지물이 되는겁니다. 왜냐면?
찢어서 들어가는 것이 아니므로 OpenProcess 같은 능동형 찢는함수를 쓰지 않아도
되니까.. 그래서 바이러스는 정상 세포처럼 감염을 시작할 수 있게됩니다..
즉, 면역체계를 무너뜨렸다라고 말하게 될 수 있죠.. 이런류의 기술은 윈도우의 경우
후킹기술에서 오래전부터 사용해왔던 것이기 때문에 새삼스럽게 다시 언급하는 것이
무색할 정도인, 지극히 정상적인 구조를 공격하는 방식이기에 잘 화두가 될 수 없었
습니다.. 화두를 만들어도 욕먹을까봐 말하지 못하던 기술이기도 하구요..
이런 류의 악성코드들이나 기술을 언급하자면, 일종의 윈도우 시스템에 나타난
진정한 "에이즈" 바이러스이다라고 말하고 싶습니다. 왜냐면 면역체계를 무너뜨렸기
때문입니다..(리눅스에도 이런 류의 비슷한 공격이 몇번 나왔었습니다.. 지금은 다
막혀서 안되는데, 권한시스템이 있어서 그러함.. 윈도우는 아무리 체킹해도 권한체계
자체가 없다고 봐야함.. 그래서 구조적으로 막을수가 없게되어 면역체계가 무너진
꼴입니다.)
이상.. 제가 쓰고 싶은 말 다 쓰고 갑니다.. 머리를 환기시키고 바라보면 매우 위대
해 보이는 기술이고 신선한 기술이지만 사실상 기존환경과 이론으로만 바라보면 매우
별거아닌 그런류의 기술들이 간간히 있습니다.. 이게 그런 꼴입니다..