티스토리 툴바

왜 보안인가?
요즘 USB 메모리 (이하 UFD)가 대중화되면서, 많은 사람들이 USB 메모리의 기능을 고려하기 시작했다.
많은 사람들이 고려하는 측면은 바로, '보안' 이다.
이른바 '보안 디스크' 기능으로서, 본인의 데이터를 암호화할 수 있는 부분에서 많은 사람들의 선택을 받는다.
이외에는 다소 전문적인 요소들로서 전반적인 선택의 측면으로 봐서는 '보안'보다는 결정적이지 못한다.

물론 USB 메모리가 '보안'만 지원할 수 있는 것은 아니다. '오토런' 이나 'DOS 부팅', '파티셔닝', 'PnP', 심지어 '포맷'까지 강조한다.

'보안' 기능을 지원하는 UFD는 특별한 것인가?
과연 '보안' 기능을 지원하는 UFD는 특별한 것인가? 제품의 특장점이라 함은, 다른 제품에 없는 기능이거나 그보다 뛰어난 점을 말한다. 시중에 팔리고 있는 몇몇 제품들을 보자.


PnP, 패스워드, 오토런, 파티셔닝, 부팅 기능을 제품 특징으로 강조하였다. (정확히는 부가기능 강조 목적이다.)


보안 파티션, PC Lock, 파티셔닝, 부팅, 암호화, 동기화 기능을 제품 장점으로 표기하였다.


USB 2.0 인터페이스, PnP, 추가 전원 불필요, 패스워드, USB 2.0/1.1 동시지원, USB 부팅, ReadyBoost 를 제품 장점/기능으로 설명하였다.

여기서 언급된 특징들을 주목해야 한다. 과연 이러한 항목들이 제품의 특장점 내지는 우월성을 강조하기 위한 항목으로 사용될 수 있는지 확인해볼 필요가 있다.

뻔한 내용들을 다 지우자.
USB 메모리는 USB 인터페이스를 사용한다. 2000년 4월 이후에 나오는 제품들은 전부 USB 2.0 인터페이스다. (2000년 4월에 인터페이스가 발표되었지만, 상용화 속도를 고려하면 2002~2003년에는 대부분의 하드웨어가 지원하지 않았을까 추정해본다.)
지원 속도는 최대 480Mbps이다. 환산하면 60MB/s. 또한 핫플러깅을 지원한다. 핫플러깅이란 PC가 작동중인 상태에서 장치를 삽입/제거할 수 있는 기술을 말한다. USB 장치는 대부분 전류를 많이 먹지 않으므로 (특히 USB 메모리) USB 2.0의 최대 전류인 400mA로 충분하다. 따라서 외부전원은 당연히 불필요하다. USB 2.0에서는 USB 1.1 장치또한 연결 가능하다. USB 2.0 인터페이스를 따르는 장치는 USB 1.1또한 기본적으로 지원하는 셈이다.

USB 메모리는 저장 장치이다. 저장 장치라면 MBR이라 불리는 영역이 기본적으로 존재한다. 이 영역에서는 MBR 코드와 파티션 정보가 기록되어 있다. (물론 Magic Code도 있다.. 0x55AA) 각 파티션 별로 PBR이 존재한다. 부팅 과정에 있어서, MBR -> 부팅 또는 MBR -> PBR -> 부팅으로 이루어진다. 여기서 말하는 PBR은 활성화 파티션을 말하는데 Windows에서는 이동식 장치에 대해서 한 개의 파티션만 지원하고 기본적으로 첫번째 파티션이 활성화 상태이다. 모든 저장 장치에 있어서, 전부 부팅이 가능하다. 부팅이 불가능한 경우는 존재하지 않는다. Public 영역이 존재하지 않아 위의 부트 프로세스에 진입하지 못하는 경우를 제외하곤 말이다. (디스크 전체가 보안 영역으로 잡히는 등의 상황을 말한다. 하지만 시중에 팔리는 USB는 이런 식으로 가공되어 나오지 않는다.) PBR의 수정만으로 부팅이 안되는 경우는, 부트 프로세스가 MBR에서 끝나는 경우인데 표준 MBR을 이용하여 다시 기록하면 Active Partition의 PBR로 제어권이 넘어오게 된다.

USB 메모리를 통제하는 컨트롤러가 존재한다. USB 메모리에는 컨트롤러라 불리는 반도체가 꼭 들어간다. 이게 없는 USB는 하나도 없다. (물론, 눈으로 안보이는 경우도 있다. 요새는 molding 형이라 하여서 하나의 IC에 메모리와 컨트롤러를 넣어서 단일 칩으로 만든 경우가 있다.) 컨트롤러가 하는 주된 기능은 USB 메모리와 PC의 연결을 중간에서 중계하는 역할이다. 즉 USB 메모리는 반도체에 불과하고 어디에 데이터를 저장해야 하는지는 모른다. 이때 컨트롤러가 위치를 잡아준다. MP Tool에서 설정가능한 Autorun Area나 Private Area, Floppy Area는 컨트롤러에서 메모리의 Region 설정을 통해 (펌웨어 업데이트) 이루어진다.

컨트롤러 차원에서 지원하는 기능이 몇가지가 존재한다. 컨트롤러 제조사 별로 다르지만 명칭만 다를뿐 기본적인 틀은 동일하다. 바로 '보안 파티션 (패스워드/Login 기능)'과 '다중 파티션', 'CD영역 (Autorun Area)이다. 여기서 말하는 다중 파티션은 Windows에서 지원하지 않는 그 '다중 파티션'이 아니라 컨트롤러 차원에서 구분되는 기능이다. 이 경우 Windows에서는 다른 Device로 인식하여 결과적으로는 다중 드라이브의 인식이 가능해준다. (하지만 Windows가 지원하지 못하는 '다중 파티션'은 한개의 이동식 Device에서 여러 개의 파티션을 지원하지 않는다는 뜻이다.) CD영역은 대부분의 컨트롤러에서 지원한다. PC Lock 기능 또한 컨트롤러 차원에서 지원되는 기능이다. (필자가 확인한 바에 따르면 SMI 컨트롤러만 지원하는 듯 하다.) 여기서 모든 컨트롤러라 하지 못하고 대부분의 컨트롤러라 하는 이유는, 시장에 출시되는 대부분의 USB 메모리는 (특히 중소기업의 USB 메모리들) USBest, SMI, Skymedi 중 하나의 컨트롤러를 사용하기 때문이다. 이들 외에도 많다. Transcend 사의 경우 Alcor 컨트롤러를 사용하는 경우다.


다시 USB 메모리 광고를 살펴보자.


이 USB만의 특징으로 내세울 수 있는 점은 없다. (위의 5개 기능은 모든 USB 메모리가 지원한다.)


이 장치의 특징은 암호화/복호화 기능과 동기화 기능이다. (사실 이것들도 번들 SW의 기능이지 UFD의 기능이 아니다.)


이 제품이 내세울 수 있는 특징은 ReadyBoost 기능과 생활방수 기능, 초경량 이라는 부분이다.

번들 SW의 지원 OS는 제품의 지원 OS와 다르다.
이제 번들 SW에 대해서 말해보자. 보안 파티션 로그인 프로그램이니 파티셔닝 프로그램이니 이런것들은 해당 컨트롤러의 SDK를 이용해서 제작된다. 암호화/복호화 프로그램이나 동기화 프로그램 등은 컨트롤러의 SDK를 이용하지는 않는다. 하지만 이들은 전부 Windows 에 맞추어 제작된다. 즉 USB 메모리의 지원 OS는 Windows, Linux, MAC 등 다양하게 적혀 있고 심지어 타 장치의 호환성을 강조하기도 한다. 하지만 번들 SW의 지원 OS는 이와는 다르다. 제대로 된 기능 작동은 Windows 하에서만 이루어질 수 있다. 몇몇 사람들은 타 장치 (네비게이션, PMP 등)에서도 보안 파티션을 사용할 수 있으리라 생각한다. 물론 절때 안된다.

올바른 사실을 구매자들에게 알려야 한다.
컨트롤러에서 모두 지원하는 기능임에도 불구하고, 보안 디스크  프로그램을 (컨트롤러 차원의 기능인데도) 별도로 판매하는 일부터, CD영역을 대량 구매시에만 지원해주거나, USB/저장 장치의 특성을 자사 제품만의 특성인 것 마냥 강조하는 행동이 이루어져서는 안된다. 구매자들은 바른 안목을 가지고 제품 선택을 해야 하고 말이다. 또한 컨트롤러 종류 등의 정보에 대한 공개도 이루어져야 한다. 사용자들에게 공개되는 정보는 극히 일부에 불과하다. 공개되지 않은 정보들은 USB 커뮤니티 등을 통해 공개되고 있는 실정이다. 컨트롤러나 메모리 (반도체) 간의 비교 등 사용자의 선택의 폭 또한 넓어져야 한다.

저작자 표시 비영리 동일 조건 변경 허락
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by toolz

Trackback Address :: http://toolz.pe.kr/trackback/189 관련글 쓰기

  1. Subject: USB 보안영역 비밀번호를 잊어버렸습니까?

    Tracked from 초짜 마케터의 좌충우돌기 2010/02/10 18:47  Delete

    일반USB에서 제공하는 보안기능으로 비밀번호 인증을 통해 접근할 수 있는 공간을 별도로 제공합니다. 오픈 마켓에서 판매하는 일반USB의 경우 대부분 위와 같은 보안 기능을 제공합니다. 비밀번호를 잊어버리더라도 데이터 암호화기능이 없기 때문에, 복구툴을 이용해서 비밀번호 인증 없이도 데이터를 복구할 수 있습니다. 이제 비밀번호를 잊어버렸다고하면 걱정하지 마십시오. USB 보안영역 데이터 복구 절차 1. 구입한 메모리 콘트롤러에서 사용할 수 있는 파티셔..

  2. Subject: 알아두면 돈 절약되는 우리주변의 상술들!!

    Tracked from 두두맨 2010/03/19 07:48  Delete

    안녕하세요? 이번에는 우리주변에 포진하고 있는 상점들의 마케팅 상술에 대해서 알아보려고 합니다. 혹시 다 알고 계시거나 너무 허접하더라도 양해해주시기 바랍니다.^^;; 1. 백화점 백화점만큼 마케팅기법에 대해서 공부하기 좋은 사례도 없죠. 다른 상점들에 비해 큰 기업이고 상품가격또한 만만치 않기 때문에 많은 기법들이 숨어있습니다. 지금부터 알아보겠습니다. 백화점에서 주로 팔리는 명품들이 왜 가까이 없고 꼭 꼭대기층에 있을까? 과연 왜 그런걸까요? 바..

댓글을 달아 주세요

  1. Favicon of http://dobioi.tistory.com BlogIcon dobioi 2010/12/20 08:56 Address Modify/Delete Reply

    그러게...
    현재 시장에서는 이런 일들이 난무하지.
    그건, 아마도, 무지한 소비자를 현혹시키기 위한 거겠지!
    하지만 제대로 알고 있는 선수들에게는 콧웃음만 나오게 만드는 거겠지!

    그런데도 저런게 먹힌다는 게 시장의 아이러니이자 비밀 중의 하나지!

    이론과 실재는 많이 다르다는 건, 기회가 그만큼 많다는 것일 수도 있다는...

공격과 방어는 종이 한장 차이입니다.
방어도 결국은 autorun 이용 악성 프로그램이나 다른 방어 프로그램을 공격하고
공격도 다른 악성 프로그램이나 방어 프로그램을 공격하고, 악성 프로그램이 공격당하는 것을 막아야 하기 때문이죠.

즉, autorun에 지정되는 주체가 되는 파일이 방어목적이면 방어프로그램,
공격목적이면 공격프로그램입니다.

그러면 긴말할것 없이, 공격법을 아나 방어법을 아나 별 차이가 없다는 소리죠.
공격법을 막는게 방어법이면 되니깐요.
필자가 알고있는 방법들을 전부 나열하고 설명해보겠습니다.

(1) 공격 : autorun.inf에 덕지덕지 붙이기
open=... 하지만 말고
shellexecute=...
shell\open\command=...
이런식으로 덕지덕지 붙이는 겁니다. 보통은 사용자가 open명령만 우회하려 시도하는 경우가 있는데
이때 이렇게 지정되어있다면, 충분히 악성 루틴을 탈 확률이 증가하죠.

방어 : 그냥 살포시 파일을 지워주면 됩니다. 파일을 지우면 open이고 나발이고 다 무용지물이겠죠.

(2) 공격 : autorun.inf에 랜덤한 주석 삽입
바이러스 검사 툴을 우회하는 방법입니다.
[AutoRun]
open=...
;adslkhgidlagdibdibysdibasdibdasibduas
shellexecute=...

이런식으로 중간에 ;로 시작하는 문장, 즉 주석을 넣으면 됩니다.
가끔씩 autorun.inf의 MD5와 같은 해시값으로 감염 여부를 체크하는 경우가 있습니다.
그러한 탐지 방법을 우회하는 방법입니다.

방어 : 그냥 살포시 파일을 지워주면 됩니다. 파일을 지우면 주석이고 나발이고 다 무용지물이겠죠.

(3) 방어 : autorun.inf라는 폴더 생성하기
autorun.inf파일이 생성되지 않았다면, 이러한 이름을 가지는 폴더를 생성할 수 있습니다.
이는 원천적으로 autorun.inf가 생성되는 것을 막습니다.

공격 : CreateDirectory 와 같은 API를 감시하고 있다가 그러한 폴더 생성이 들어오면 바로 ERROR를 내버리면 됩니다. DLL 인젝션을 해도 되고, Code 인젝션을 해도 됩니다. 인젝션을 통해서 Hooker DLL을 넣는 방식이 아니면, 커널 드라이버 정도 커널에 올려서 후킹을 해도 됩니다. 워짜피 커널 메모리 영역은 모든 프로세스에 대해 동일한 물리 메모리 주소 참조가 되기 때문이죠.

(4) 방어 : 특정 폴더의 ACL 박탈
autorun.inf 파일 또는 폴더의 ACL을 박탈하여 사용자가 이를 조작할 수 없도록 합니다.
NTFS 방식의 하드디스크에는 보안 기능이 적용되어 있어서 ACL (Access Control List)에 따라서 접근을 제어합니다.
따라서, 특정 폴더의 ACL을 박탈하게 되면 접근을 제어할 수 있습니다.

공격 : 시스템 권한의 허점을 이용하여 NT AUTHORITY\SYSTEM 의 권한을 얻은 상태에서 ACL을 다시 작성후 감염을 시킵니다. XP이하에서는 UAC기능이 없으므로 적합.

생각나면 또 마저 적겠습니다..

저작자 표시 비영리
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by toolz

Trackback Address :: http://toolz.pe.kr/trackback/135 관련글 쓰기

댓글을 달아 주세요

사실 이 부분에 대해서는 그닥 쓸 수 있는 내용이 적습니다.
이유는, 본래 이 글에서 논하고자 했던 것은 autorun을 이용한 공격에 관한 것이고
잠입 이후에는 바이러스 본체는 각자의 활동을 하기 때문이죠.

그러나, autorun을 이용해서 잠입했다 하더라도 공통적으로 수행하는 것들이 있곤 합니다.
그런 것들에 대해서 알아보겠습니다.

시작에 앞서, 컴퓨터는 autorun으로 이미 감염이 된 상태라고 가정합시다.

  1. 나의 존재를 사용자에게 알리지 마라 - SHR 속성, 레지값 강제하기
  2. 내가 곧 시스템, OS와 동거동락 (은폐)


1. 나의 존재를 사용자에게 알리지 마라 - SHR 속성, 레지값 강제하기

일단 잠입에 성공했으면 최대한 시스템에 붙어서 사용자를 괴롭혀야 합니다. 그 노력의 일환으로 몇가지 행동들이 수행되곤 하죠. 물론 호환성을 극대화하여 많은 PC에서 효과를 보기 위해, 모든 PC에 공통적으로 존재하는 사항들만을 이용합니다.

첫번째 알아볼 수단은 바로 SHR 속성입니다. 물론 SHR 이라는 속성은 없습니다. System, Hidden, Readonly 속성의 앞글자죠. Hidden이나 Readonly만 주면 될것이지 뭐하러 이렇게 복잡하게 주느냐 하면..

System 속성은 조금 뒤에 나올 '보호된 운영체제 파일 숨기기'에 활용할 목적이 있습니다.
Hidden 속성은 조금 뒤에 나올 '숨김 파일 표시 안함'에 써먹으려고 하는 것이고
Readonly 속성은 무단 수정을 방지할 목적으로 쓰입니다. 만약 R 속성이 걸려있다면 R 속성을 풀은 후에야 CreateFile 등의 API로 기록이 가능할 것이며, 수정 작업이 가능할 것입니다. 그러면 R 속성을 걸고, SetFileAttributes 함수를 전역 후킹해서 해당 파일이 R 속성을 풀으려는 것이 시도되는 경우, 그냥 튕겨낼 수 있는 상황을 유도할 수 있습니다.

분명한 결론은, 시스템에서의 각종 제약사항을 가지는 속성을 잔뜩 걸고 해재를 하는 함수를 먼저 선점할 수 있는 근간을 마련하게 되기 때문에 PC에서 '갑'의 상황을 가질 수 있겠죠.

이제 레지값 강제하기에 대해서 알아보겠습니다.
아래 창은 [폴더 옵션] 창입니다. (필자 PC인 Windows XP, 고전 테마에서 캡쳐)


'보호된 운영 체제 파일 숨기기', '숨김 파일 및 폴더 표시/표시 안함' 이 두개가 레지값 강제의 핵심입니다.
'보호된 운영 체제 파일 숨기기' 의 경우는 다음과 같은 레지스트리 값을 가지며, 매 변경시마다 Notify 메세지를 뿌리는 듯 합니다.
Key : HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\
        Advanced\Folder\SuperHidden
(파일 표시 상태)
Value : CheckedValue = 0
           DefaultValue = 0
           UncheckedValue = 1
(파일 숨김 상태)
Value : CheckedValue = 1
           DefaultValue = 1
           UncheckedValue = 0

라고는 하는데, 바로 바뀌지는 않을겁니다. 레지스트리가 캐싱되어 있어서 바로 반영은 안되는듯 합니다.

'숨김 파일 및 폴더 표시/표시 안함' 은
Key : HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\
        Advanced\Folder\Hidden

하위에 같은 같은 식으로 그러한 키가 존재합니다.

그럼 왜 이 두개의 레지스트리 값을 강제하는가 하면..
1. 어쨌든 사용자는 레지스트리 값을 변경하여 Notify를 해야 변경할 수 있습니다.
2. 그러나 이 둘이 풀려버리게 되면 앞에서의 System,Hidden 속성이 그냥 개똥이 되어버립니다.
3. 바꾸던 안바꾸던 1,2초에 한번씩 계속 레지값을 바꿔주고 바뀌었을때 Notify를 해준다면, 사용자의 변경을 무력화할 수 있습니다.

그런데 레지값을 바꿀려면 프로세스를 실행하거나 스레드로 작동을 해야할텐데.. 어떻게 해야될까요?
답은 간단합니다. autorun.inf에 달라붙는 놈은 단순히 수송책일 뿐이고 이놈이 DLL을 까놓고 여기에 이러한 악성 루틴을 넣고 멀쩡한 프로세스에 넣어서 돌리면 됩니다.
이것은 OS와 사용자 모두를 속이는 은폐에 관한 내용이므로 다음 파트에서 이어하겠습니다.

2. 내가 곧 시스템, OS와 동거동락
"
어느날 갑자기 이상한 DLL이 굴러와서 하는 짓이
'내가 곧 시스템이요' 하면 어째야 할까?
당장 무례한 놈을 끌어내야하지 않은가?

근데 결국은 사용자도 OS하에 작업을 하는 만큼, OS를 끼고 도는 놈이 이긴다.
그런데 사용자가 기계인가? 그렇다고 컴퓨터 속으로 들어가 백병전을 벌이고 올까?
아무래도 바이러스가 유리한 셈이다.
"

앞에서도 레지값을 강제하는 방법에 대해서 봤지만, 사용자를 골탕먹이기 위한 방법들로만 가득차 있습니다.
OS를 끼고 돌거나 속이는 경우에는 사용자도 같이 속아버리기 마련. 즉 컴퓨터를 속이는 것이 최고의 방법인데

그렇다면 자신의 코드를 대놓고 실행하는가? 그러면 없애기도 쉽겠죠.
바이러스로써는 자신이 최대한 탐지되지 않으면서 자신의 코드를 실행할 수 있어야 합니다.
여기서 몇가지 방법들을 제시해볼 수 있습니다.
  1. 대놓고 프로세스 생성. 커널에서 ObOpenObjectByPointer 와 같은 함수 후킹으로 접근 원천 차단
  2. 이미 있는 프로세스에 DLL 인젝션 (코드 삽입 기술)
  3. 커널에서 파일,프로세스 은닉으로 사용자 몰래 프로세스 생성,작업
  4. BHO로 등록.
  5. 기존 커널 수정. 예를 들면 msgina라든가 말이다.

1번은 어떻게든 까고 보면 후킹을 무력화할 수도 있을 뿐만 아니라, 커널 드라이버를 로드하기 위해서는 권한이 필요합니다. 이는 탐지될 위험을 극대화하므로 좋지 않은 방법입니다.
2번을 성공적으로 수행하기 위해서는 종료되면 블루스크린이 나는 Critical Object, 즉 시스템 프로세스에 인젝션을 하면 됩니다. 여기서는 CreateRemoteThread->LoadLibrary가 제일 간편합니다.
3번또한 후킹과 커널 접근의 문제가 있습니다.
4번은 키만 제거하면 되니 불안정하겠고
5번은 메리트는 있으나, 번거롭긴 하죠.

2번의 방법이 제일 무난합니다. DLL Injection에 대해 간단히 설명하자면, 이미 존재하는 프로세스에 DLL을 강제로 로드하게 하는 기술입니다. 관련 글은 필자의 블로그에 있을겁니다. 여기서는 프로그래밍 적인 내용을 고려할 필요는 없으므로 패쓰..


이렇게 해서 DLL을 시스템 프로세스에 주입을 했다고 합시다.
그렇다면 일반 사용자들은 DLL이 주입되었다는 사실조차 모릅니다.  왜냐하면 비록 모듈 리스트에는 나오긴 하지만, 그마저도 프로세스처럼 대놓고 나오는 것이 아니기 때문이죠.
또, 모듈 리스트를 구하는 API에는 EnumProcessModules 라는 API도 있긴 하지만, 이를 후킹하여 결과값을 조작한다면 노출마저 시키지 않을 수 있죠.

그럼 DLL이 주입되었다는 사실을 알았다고 칩시다. 어떻게 없애야 될까요?

보통은 해당 프로세스를 종료하게 합니다만 시스템 프로세스에 인젝션 했으면 이 방법은 자신의 시스템을 죽이는 꼴입니다.
IceSword 등의 도구로 강제 DLL 언로드를 할 수 있습니다. 이는 PEB의 LIST_ENTRY 형을 가지는 모듈 리스트를 조작하면 됩니다.

근데 또다른 Watcher 스레드 (감시자 스레드)가 DLL의 언로드 여부를 계속 보고 있다가 없으면 또다시 찔러넣고 한다고 합시다. 그러면 IceSword같은 프로그램도 병신이 되는겁니다. 개처럼 뛰는 노가다에는 약도 없죠.
그러면 해당 Watcher 스레드를 찾아야 합니다. 근데 프로세스야 부모 프로세스ID로 실행시킨 놈을 찾지만, 스레드는 어떻게 해야될까요? 사전에 후킹과 같은 작업을 해놔서 감시를 하지 않는 이상은 거의 추적이 불가능합니다. 게다가 그 Watcher 스레드가 DLL 인젝션을 시스템 프로세스에서 지시를 내리게 한다면, 추적을 충분히 엿먹일 수 있습니다.


위에서 살펴본 두가지의 유형에는 공통점들이 있습니다.

  1. 불가항적으로 실행되어야 하는 시스템 프로세스에 삽입함으로서, 자기 자신의 존재와 종료를 최대한 제한할 수 있음.
  2. 최소의 권한을 사용함으로서, 추적을 최대한 피할 수 있음. (특수 권한 요청이야 기록을 남길 수 있다고 치지만, 기본 권한 등까지 모니터링을 하지는 않기 때문;;-이 악물고 로그 분석 전까지는..)
  3. 시스템 의존적인 부분의 이용을 최대로 많은 시스템에서 악성 루틴을 실행할 수 있게 함.

결국은 자기 자신의 생존에 관하여 끈질기게 해주는겁니다.
때로는 ZwSetSystemInformation 등의 함수를 이용해서 강제로 커널에 드라이버를 로드할 수도 있지만, 이는 적당한 기술을 필요로 하는지라.. 그렇지만 커널을 손에 넣으면 더 많이 시스템을 가지고 놀 수 있다는 점은 무시할 수 없습니다.

다음 파트에서는 최대한 autorun 공격을 우회하는 방법, 즉 시스템의 여러 편법들을 이용해서 최대한 방어를 하는 방법에 대해서 알아보겠습니다.

저작자 표시 비영리
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by toolz

Trackback Address :: http://toolz.pe.kr/trackback/115 관련글 쓰기

댓글을 달아 주세요

  1. Favicon of http://triangle.blogner.com/ BlogIcon 삼각형 2009/08/15 13:11 Address Modify/Delete Reply

    요즘 악성코드들은 무식하게 프로세스도 도는 놈은 없죠.
    바로 들키니까.
    SystemExplorer은 모듈을 보여주는데
    언로드는 불가해서 저번에 걸렸을 때, 직접 dll파일 경로로 가서(그건 되더군요) dll을 언락커로 삭제했던 기억이 나네요.
    이참에 시스템 도구들은 더 받아 놔야 겠습니다.

    참고로 요즘에는 숨김과 시스템 파일 숨김 옵션을 감시하기도 하고, 또 그 속성들의 설정 값을 숨겨버려서 사용자가 폴더 옵션으로 설정 불가능 하게 해버립니다.

    근데 말이죠.
    굳이 dll인덱션 할 필요 없이, 그냥 자기 자신을 드라이브로 등록해서 자동실행되게 하면 안되나?

    • Favicon of http://toolz.tistory.com BlogIcon toolz 2009/08/15 13:51 Address Modify/Delete

      일단 PC에서 실행이 한번이라도 되었다면
      사용자를 엿먹일 어떠한 개짓이라도 가능하죠.

      예를 들어서 Superhidden이나 hidden을 폴더 옵션
      조정에서 아주 없애버린다던가

      폴더 속성에서 SH 속성을 해재조차 못하게 하던가;;

      드라이브로 등록하려면 커널에서 디바이스를 생성해서
      FS Driver로 등록하고 하는 것이 일반적입니다.

      자동실행을 하면 다시 한번 사용자가 실행을 시키거나 해야죠. 근데 걸린걸 알고서 또 클릭하는 무지한 사용자는 상대적으로 적겠죠.

      그리고 자동 실행을 하면 프로세스의 형태로밖에 안될텐데;?

    • Favicon of http://triangle.blogner.com/ BlogIcon 삼각형 2009/08/15 14:08 Address Modify/Delete

      처음 녀석은 프로세스이지만
      그녀석이 드라이브를 등록시키는 역활한 하고 사라지면 되겠죠.

    • Favicon of http://toolz.tistory.com BlogIcon toolz 2009/08/15 15:51 Address Modify/Delete

      드라이브를 생성하려면, 커널에서 IoCreateDevice를 해서 파일시스템 드라이버를 생성해야 합니다.
      결과적으로는 커널 드라이버를 작성해야 한다는 소리인데, 드라이버를 로드하려면 SeLoadDriverPrivilege 특권이 있어야 하고 이는 관리자 권한이 있어야 합니다. 최소 권한 요구 원칙이 깨지므로 비스타에서는 UAC에 의해 사용자가 거부할 기회를 줘버립니다.

      그리고 드라이브로 등록을 한다 하더라도, 실행이 될 수 있는 근간이 유저에 의해 마련되어 실행이 되어야 하는데 (아직 잠입을 못했으니깐-잠입했으면 이짓을 할 필요조자 없죠) 어떤 유저가 듣도 보도 못한 드라이브를 클릭해서 들어가겠나요;; 이미 존재하는 환경을 최대한 활용하고 시스템 의존적 부분을 최대한 줄여야 되는 원칙조차 깨버리게 되죠.

      흔적과 권한이 문제죠. 그걸 제외하고는 수많은 방법들이 있으나, 이 둘을 줄이는 방법은 그렇게 많지 않습니다. 더욱이 사용자를 완벽히 속이는 방법은 말이죠.

  2. Favicon of http://hbkt.tistory.com/ BlogIcon '비트'랍니다 2009/08/18 18:03 Address Modify/Delete Reply

    바이러스 짜고있는데 정말 감사요.(응?)

  3. Favicon of http://bnsonear.tistory.com BlogIcon 비행청소녀L 2009/09/01 09:39 Address Modify/Delete Reply

    알았다고 해도 이미 개인차원에서 어떻게 손 써볼 수 있는 수준은 넘어간것같지만,
    다음 내용이 기다려지네요.
    잘 보았습니다!

    • Favicon of http://toolz.tistory.com BlogIcon toolz 2009/09/02 00:31 Address Modify/Delete

      끙.. 아마 주말이나 2일 후쯤에는 나올것 같습니다.

      학교 숙제 바뻐성 ㅠㅠ

급하거나 대충 읽어볼 사람들은 굻은 글씨와 밑줄, 빨간 글씨만 읽어도 문제없습니다.
다만 내용 이해에는 약간의 어려움과 응용에 어려움이 있을 수도 있겠죠;?

일반적으로 Autorun.inf를 이용한 공격 방법이 몇가지가 있습니다. (주로 처음에 PC에 달라붙기 위한 수단이죠.)
그리고 백신 등의 탐지를 우회하기 위한 방어 수단이 몇가지가 있습니다. (주로 감염 후에 취하는 동작들입니다.)
그리고 사용자의 눈을 속이기 위한 회피 수단이 몇가지가 있습니다. (주로 감염 후에 취하는 동작들입니다.)

이제 필자가 겪음으로써 알아낸 정보들을 바탕으로 오토런 공격에 대해서 능력껏 까발러보겠습니다.

1편. 사용자를 속여라, autorun 파일의 눈속임-확장자의 기술
2편. 컴퓨터를 속여라, 은둔형 외톨이로 살아가는 바이러스
3편. 선제 공격, 방어를 위한 전진 기지

1. 사용자를 속여라, autorun 파일의 눈속임-확장자의 기술
상용 소프트웨어 설치 CD 등지에서 볼 수 있는 autorun.inf는 다음과 같은 형식을 가지게 됩니다.

[AutoRun]
open=Setup.exe
icon=Setup.exe,0

USB에 맞추어 사용하는 경우에는 다음과 같이 쓰기도 합니다.
[AutoRun]
open=Launcher.exe
icon=Icon.ico
label=toolz-USB
shell\lost=제 USB를 찾아주세요
shell\lost\command=Lost.exe
shell\home=홈페이지 열기
shell\home\command=iexplore http://toolz.tistory.com

open은 실행 명령을 뜻합니다.
icon은 말그대로 아이콘 지정이고
shell\Xxx는 Xxx라는 항목을 생성하게 합니다. (오른쪽 컨텍스트 메뉴)
그리고 shell\Xxx\command라는 항목에서 Xxx라는 항목을 클릭했을 때의 동작을 명기해주죠.

만약 shell\open 을 했을 경우.. 기본적으로 열기 동작을 덮어쓰게 됩니다.

여기서 감염체가 취해야 하는 동작은 '실행'입니다.
즉, 사용자 또는 시스템이 감염체를 실행하게 해야합니다.

위의 관점을 가지고 있는 상태로.. 다시 autorun.inf를 봅시다.

열 수 있는 방법을 최대한 많이 가지는 것이 감염 입장에서 유리할 것입니다.
그러면 위의 open, shell\open 말고 또다른 가능성 들에 대해서 생각해봅시다.

shellexecute라는 놈을 추가할 수도 있습니다.
이쯤 되면, 사용자가 취하는 어지간한 동작 들의 길목에서 감염체를 실행할 수 있습니다.

완성된 코드를 볼까요?
[AutoRun]
open=Toolz.exe
shell\open\command=toolZ.exe
shellexecute=tOolz.exe

그러나 백신 제조자들이 샘플 비교를 통해서 진단을 해낼수도 있습니다.
이에 따라, autorun.inf에 주석을 삽입하여, 이러한 진단 방법에 어느정도 타격을 줄 수 있습니다.
다음 코드를 보면..
[AutoRun]
;asdpbfhbcwknxzyubdomxhvbdl;mxjbxlnz;
open=Ghost.exe
;dflhauhfdcnmcnocncvcxbn;ouixddxbidasbduobdi
shell\open\command=Ghost.exe
;fadbdfuydbfodyb
;das;dhsna8oadgugdatidafdatrcrczpojzojzpjmno
shellexecute=Ghost.exe

그래봐야 실행되는 것은 같습니다만, 진단을 피하는 효과를 줍니다.

그럼 이제 autorun.inf에서 할 수 있는 것들은 끝났습니다.
하지만 확장자에도 숨겨진 사실이 있습니다.

보통, 실행 가능한 파일 (일반적으로 PE 포맷을 가진 파일)의 확장자는 EXE 입니다. 도스용 프로그램이 COM이고요.
화면보호기 또한 PE 포맷을 가지고 있습니다. 확장자는 SCR이지만, 결과적으로는 일반 프로그램과 다를 것이 없습니다.
다시 말해서, 확장자가 EXE가 아닌 SCR이더라도 감염체의 실행이 가능하다는 점입니다.
따라서 [자세히 보기]를 통해서 파일 형식을 보면 '화면 보호기' 로 되어있을 것입니다.
이는 몇몇 백신들이 실시간 감시 등에서 EXE,DLL파일만 검사하게 하는 경우가 있는데, 이를 회피할 수 있습니다.



또 있습니다. PIF는 COM 등의 도스 프로그램 바로가기 입니다. 그러나 EXE 파일의 확장자를 그대로 PIF로 변경하면, 잘~ 실행됩니다. 자세한 이유는 모르겠으나, 확장자가 pif로 바뀌면, Windows 탐색기 에서는 확장자 편집을 할 수 없습니다. PIF 뿐만 아니라, BAT,CMD 등의 배치파일 형식도 PIF와 같은 현상을 일으킵니다.

이제 확장자를 통한 사용자,백신의 눈속임도 알아보았습니다.
이번 내용을 정리해보면..

- Autorun.inf 를 통한 감염체 실행
(1) open 명령 사용
(2) shell\open 명령 사용
(3) shellexecute 명령 사용
(4) 중간에 강제로 주석 삽입으로 몇몇 백신 감시 우회 가능

- 확장자 변경
(1) SCR, 화면 보호기 형식
(2) PIF, DOS 바로가기 형식
(3) BAT, 배치파일 형식
(4) CMD, NT 배치파일 형식

언급된 8개의 방법은 autorun, 확장자를 이용한 감염 방법, 우회 방법들이며 실제 감염체 실행은 이들의 사용 또는 적절한 조합으로 이루어 집니다.

다음 파트에서는 감염 후 탐지, 원상 복귀를 방해하기 위한 동작들에 대해서 알아보겠습니다.
저작자 표시 비영리
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by toolz

Trackback Address :: http://toolz.pe.kr/trackback/113 관련글 쓰기

댓글을 달아 주세요

  1. Favicon of http://blog.naver.com/anicsg2 BlogIcon anics 2009/08/13 17:10 Address Modify/Delete Reply

    1등~~.. 이 아니라..
    요새 시디영역에 부팅시 런처 실행시키기에 푹 빠져서 공부는 안하고 맨날 띵가 띵가 노는 대학생입니다..
    아 정말 피와살이 되는 글이군요.. 사실 잘 못알아들어서 반은 넘겼지만 하루가 걸려도 정독해야겠습니다..

    • Favicon of http://blog.naver.com/anicsg2 BlogIcon anics 2009/08/13 17:13 Address Modify/Delete

      말씀하신데로.. 역시 이것저것 검색하다가 많이 읽었던 댓글 들이 눈에 띄는군요..ㅎㅎ

    • Favicon of http://toolz.tistory.com BlogIcon toolz 2009/08/13 17:38 Address Modify/Delete

      방어를 할려면
      공격을 알아야죠 ㅋ

      공격법을 알아놓으면
      방어가능한 경우에는 쉽게 방어가 가능하겠죠.

  2. Favicon of http://triangle.blogner.com/ BlogIcon 삼각형 2009/08/13 17:30 Address Modify/Delete Reply

    그러니까 Autorun.inf에 렌덤의 쓰래기 값을 추가함으로써
    MD5같은 해쉬 값으로 인한 진단을 피하겠다는거군요.
    근데 전 pif로 바꿔도 잘만 확장자 변경되던데요.

    • Favicon of http://toolz.tistory.com BlogIcon toolz 2009/08/13 17:37 Address Modify/Delete

      바로 변경은 안될겁니다. (Explorer 상에서 말입니다.)
      예를 들어 menu.lst라고 표기가 되어있는데
      이를 menu.pif로 변경한다면, menu라고만 보입니다.

      [XP기준, 타 버전은 다를지도..]

    • Favicon of http://triangle.blogner.com/ BlogIcon 삼각형 2009/08/13 19:08 Address Modify/Delete

      아하.
      탐색기에선 안되더군요.
      전 rename 명령어로 변경되는거 말했다는.

  3. Favicon of http://bardisch.textcube.com BlogIcon Bardisch 2009/08/13 20:48 Address Modify/Delete Reply

    역시 형은 파헤치는건 잘하심 ㅋㅋ
    대략 알고있던 내용인지라 감흥은..[?!]

  4. NEX 2009/08/13 21:20 Address Modify/Delete Reply

    음... 뭐야 이딴글은 확 추천해버려야되 -_-)bbbbbb