본문 바로가기

보안라이프/이슈&이슈

랜섬웨어! 정체를 밝혀라!

▶1. 랜섬웨어? 그게 뭔데요?

  랜섬웨어는 희생자의 정보를 암호화하는 악성코드이다. 신용카드 정보 등의 정보를 훔쳐가는 기존의 일반적인 악성코드와는 달리, 희생자 로컬에 존재하는 파일들(.hwp, .doc )들을 암호화한다. 암호화된 파일들은 “.ccc”, “.encryped” 등의 확장자로 변형되며, 접근하지 못하게 된다. 그것들을 복호화하기 위해서는 키가 필요한데, 그 키는 공격자가 가지고 있다. 그리고 공격자는 희생자에게 협박을 시작한다. “너의 파일들을 복호화하고 싶으면 돈 내놔!” 이렇게 협박을 하면서 인질들의 몸값으로 적게는 30만원에서 많게는 1000만원까지도 요구한다.


▶2. 랜섬웨어, 어떻게 감염이 되는 것일까요?

  희생자는 스팸 메일에 첨부된 파일을 실행하거나, 드라이브 바이 다운로드 공격(Drive By Download)코드가 삽입된 웹 페이지에 접근함으로써 랜섬웨어에 감염될 수 있다. 또한 요즈음에는 토렌트의 첨부파일을 통해 감염이 되기도 한다.(스크린세이버 파일 등). 



3. 파일이 암호화되는 상세 과정은요?  

립토락커의 작동 과정을 예를 들어 설명하도록 하겠다. [그림 1]은 크립토락커 일부 변종의 작동 과정이다. 그러나 랜섬웨어의 종류, 변종 별로 각기 다른 작동 과정과 암호화 과정이 적용되므로 [그림 1]의 과정이 모든 랜섬웨어에 적용된다고 생각하면 안 된다. 


[그림 1 - 암호화 과정]

1. 사용자는 랜섬웨어에 감염된다. 이 랜섬웨어에는 공격자의 RSA 공개키가 하드코드되어 전송된다.
2. 
랜섬웨어가 실행된 후 사용자는 공격자의 C&C서버에 접속한다. 이때 사용자의 시스템 정보, 아이피 정보 등을 공격자에게 전송한다. 
3. 사용자 시스템에서 자동으로 생성되는 대칭키(AES-256)를 이용하여 사용자의 파일을 암호화한다.
4. 사용자의 암호화된 데이터 정보와 암호화된 대칭키 정보를 공격자에게 전송한다. 
5. 암호화를 마치면 사용자의 로컬에 존재하는 공격자의 RSA 공개키가 삭제된다.
6. 이 과정은 추가적인 과정이다. 만약 희생자가 공격자에게 비트코인을 전송한다면, 공격자는 RSA 개인키를 전송함으로써 희생자 파일을 복호화하게 할 수도 있다. 그러나 가능성은 희박하다.


  랜섬웨어에 감염되면 파일들은 AES-256알고리즘의 대칭키로 암호화된다. 그런데 이 과정에서 공격자는 RSA-1024나 RSA-2048와 같은 비대칭키 암호화 알고리즘 또한 사용한다. 즉, AES 대칭키 알고리즘과와 RSA 비대칭키 알고리즘 2가지를 사용하는 것이다. 여기서 의문이 생긴다. 공격자는 비대칭키만으로도 충분히 안전한(?)파일의 암호화가 가능하다. RSA-1024나 RSA-2048현재 기술로는 크랙이 불가능한 알고리즘이기 때문이다. 그런데 공격자는 파일을 암호화할 때 256비트의 비교적 크랙하기 쉬운 AES키를 사용한다. 왜 이런 일을 하는 것일까? 

  굳이 AES-256을 사용하는 이유? 그 이유는 바로 대칭 키의 빠른 암호화에 있다. RSA-2048과 같은 비대칭 키는 대칭 키에 비해 안전하지만 파일을 암호화 하는 데 시간이 오래 걸린다. 랜섬웨어 특성상 희생자 파일들을 빠르게 암호화한 후 사라져야(자기삭제) 탐지될 확률이 적어진다. 따라서 랜섬웨어 제작자들은 파일을 암호화할 때 속도가 빠른 AES를 사용하고, RSA는 AES 키를 암호화하는 데 사용함으로써, 속도와 안정성 두 마리 토끼를 잡을 수 있었던 것이다. 



4. 그렇다면, 공격자를 추적할 수 있지 않을까요?

  현실 세계에서 사기 범죄가 발생했다. 경찰은 범죄자의 계좌번호를 알아내었고, 은행에 연락하여 범죄자의 이름, 거주지 등의 신상정보를 알아내었다. 그리고 며칠 후 범죄자를 성공적으로 체포할 수 있었다. 이것은 현실에서 일어나는 범죄에 대한 매우 일반적이고 당연한 접근방법이다. 
  자, 이제 랜섬웨어에 이 상황을 대입해 보도록 하자. 아까 말했듯이 랜섬웨어는 희생자에게 “입금”을 요구한다. 그러면서 "비트코인 주소"라는 일종의 계좌번호 정보를 남긴다. 앗, 그렇다면 이 계좌번호로 공격자를 추적할 수 있지 않을까?


[그림 2 - 비트코인]

  슬프게도, 그럴 수 없다. 비트코인이라는 인터넷상의 화폐를 사용하기 때문이다. 비트코인은 발매자도 없고 관리자도 없다. 또한 비트코인은 비트코인 주소를 제외하고는 공격자의 어떤 정보도 포함하지 않는다.. 모든 비트코인 사용자는 여러 개의 비트코인 주소를 소유할 수 있으며, 또한 공격자는 새로운 주소를 무한대로 생성할 수 있으므로 공격자의 추적은 불가능하다. 




5. 랜섬웨어 감염을 예방하려면? 혹은 감염된 시스템을 복구하려면?

  먼저 랜섬웨어 예방법을 소개함에 앞서, 이 단원에서는 "병에 걸리지 않기 위해서는 손을 깨끗이 씻어라"와 같은 교과서적인 말밖에 할 수 없다는 점에 미리 사과한다. 말 그대로다. 예방법으로는 대표적으로 4가지가 있다. 일단 첫 번째로, 사용자는 수상한 URL에 접근하지 말아야 한다. 파일을 다운받거나 실행하지 않아도, URL을 클릭하는 것 만으로도 랜섬웨어에 감염될 수 있다는 사실을 인지하고 있어야 한다. 두 번째로 랜섬웨어에 감염될 때를 대비하여 파일을 주기적으로 외부 저장소에 백업해 두어야 한다. 세 번째로 수상한 E-mail에 첨부된 실행 파일을 실행해 보거나, 출처가 불분명한 파일을 실행하지 말아야 한다. 이 때에는 .exe확장자 뿐만 아니라 .scr(스크린세이버)등의 기타 확장자의 파일 또한 조심해야 한다. 마지막으로 웹 브라우져와 운영체제, 그리고 백신을 꾸준히 최신 버전으로 업데이트하여 알려진 취약점을 이용한 공격을 막아야 한다.
  어렵지만, 복구 방법도 있긴 하다. 일말의 가능성을 믿고 공격자에게 비트코인을 보내보기, 지구 어딘가에 존재할 
공격자의 C&C서버를 털어서 키를 가져오기(..?), 양자컴퓨터를 개발하여 RSA-2048(RSA-1024)알고리즘을 크랙해 보기(...?),  타임머신을 개발하여 파일이 암호화되기 전으로 돌아가기(....?) 등등의 조금은 어려운(...) 방법이다. 첫 번째 방법은 랜섬웨어 범죄 행위를 부추길 수 있다는 점에서 권장하지 않는 방법이다. 또한 세 번째와 네 번째 방법은 안타깝게도 아직 보고된 성공 사례가 없지만, 두 번째 방법은 사례가 존재한다. 올해 9월 네덜란드 경찰이 랜섬웨어 용의자의 서버를 털어 14031개의 복호화 키를 확보하고, 해당 복호화 키를 대상으로 카스퍼스키랩에서 랜섬웨어 복호화 툴을 만들어 배포하였던 사례이다. 이에 대한 자세한 정보는 https://noransom.kaspersky.com/에서 확인할 수 있다. 


[그림 3 - 백신의 자동 업데이트 허용]




6. TeslaCrypt 파헤치기! : 시스템 관점과 네트워크 관점에서

 ▷6.1 시스템 관점에서

  TeslaCrypt는 게임 관련 파일들을 대상으로 한 랜섬웨어이다. 필자는 웹 서핑을 통해 TeslaCrypt의 샘플을 구할 수 있었고, 여기에서는 간단히 분석해보았다. 먼저 [그림 4]는 감염 직후의 희생자 바탕화면이다. TeslaCrypt는 희생자 시스템을 감염시킨 후 친절하게도 3가지 방법(png, txt, html)으로 입금을 안내한다. 


[그림 4 - 감염 직후]



 희생자 시스템 내의 파일은 [그림 5]와 같이 .ccc의 확장자가 생기며, 해당 파일을 열 수 없게 된다.  암호화 된 것이다. 


[그림 5 - 파일의 변화]



  또한 C:\Documents and Settings\ever\My Documents 하위에는 recover_file_[랜덤문자열].txt 파일이 저장된다. 이는 희생자의 시스템, IP등의 정보를 포함하는 값으로, 희생자를 구분하는 역할을 한다. 추후에 공격자 사이트에 이 파일을 업로드 해야만 공격자의 비트코인 지갑 주소를 알 수 있다. 


[그림 6 - 희생자를 구분하는 고유한 값]



  또한 레지스트리의 값에도 변화가 존재한다. 희생자 레지스트리의 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run] 경로에는 "qewr2342"라는 이름으로 "C:\\Users\\Administrator\\AppData\\Roaming\\[랜덤문자열]-a.exe"가 저장된다. 여기에서는 pojiu-a.exe의 이름이다. RUN 레지스트리는 자동 실행 프로그램을 등록하는 곳이다. 그렇다면 키 값으로 등록되는 pojiu-a.exe 파일은 무엇일까?

[그림 7 - 랜섬웨어 실행파일 레지스트리 등록]

 pojiu-a.exe은 랜섬웨어 실행파일이 드롭하는 파일이다. 랜섬웨어 파일과 구조상 동일하며, %Appdata% 경로에 생성된다. 기존의 악성코드들이 코드 인젝션이나 DLL 인젝션을 이용해 악성 행위를 수행했던것과 달리 TeslaCrypt는 이렇게 악성행위 실행파일 자체를 특정 경로에 생성하여 실행하는 특징을 보인다. 동적 분석 결과, Teslacrypt에 감염된 시스템에서는 다음과 같은 행위가 순차적으로 수행됨을 확인할 수 있었다.

1. 맨 처음에 희생자가 랜섬웨어 실행파일에 감염된다.  
2. 해당 랜섬웨어 실행파일은
자기 자신과 동일한 실행파일을 %Appdata%경로에 생성한 후에 자기자신을 삭제한다. (생성하는 파일의 이름은 [랜덤문자열]-a.exe이다.)
3. 
생성된 실행파일 [랜덤문자열]-a.exe은 희생자 시스템 내에서 파일을 암호화하는 실제 악성행위를 수행한다. 그 후 모든 일을 마치면 자기자신을 삭제한다. 

 또한 레지스트리의 HKCU\Software\5A62E9DE47EBD77\data경로에 랜덤 문자열의 이름으로 binary형태의 키 값을 등록한다. 희생자 시스템에는 아래와 같은 로그가 남는다. 

01/12/2015 21:5:34.125","registry","SetValueKey",
"C:\Users\Administrator\AppData\Roaming\pojiu-a.exe","HKCU\Software\5A62E9DE47EBD77\data
[그림 8 - 희생자 로그]



이렇게 레지스트리의 HKCU\Software\5A62E9DE47EBD77\data경로에 저장된 값을 추출하여 hex값을 살펴본 결과 [그림 9]와 같이 1024비트의 문자열이 확인되었다. 이는 공격자의 RSA 공개키로 추측된다. 이 키 값은 시스템 내의 모든 암호화된 파일에서 공통적으로 발견된다. [그림 9 - data레지스트리 값]과 [그림 10-암호화된 파일 값]의 블록 지정된 부분은 동일한 값인데, 이와 같이 Teslacrypt악성코드는 암호화 과정에서 시스템의 레지스트리를 이용한다.


[그림 9 - data 레지스트리의 값]



[그림 10 - 암호화된 파일]


해당 키값은 희생자 시스템 내의 모든 암호화된 파일에서 공통적으로 발견된다. 이를 통해 필자는 다음과 같이 해석할 수 있었다.

"TeslaCrypt는 희생자 시스템 내의 파일을 AES키값으로 암호화한다. 이러한 AES키값은 악성코드 실행시간에 랜덤하게 생성된다.
즉 모든 파일은 각기 다른 AES키로 암호화되는 것이다. 그 후에 파일의 헤더에 해당 AES키를 붙인다.
그리고 이렇게 생성된 파일의 [헤더+데이터] 부분을 통채로 RSA 공개키로 암호화한다.
마지막으로, 사용된 RSA 공개키를 [그림 9]에서 확인할 수 있듯이 파일의 앞부분에 붙인다. 
이렇게 하면 희생자가 어느 한 파일의 AES키값을 알아낸다고 해도 전체 파일을 복호화하지는 못한다.
왜냐하면 전체 파일은 각각 다른 AES키값으로 암호화되어 있기 때문이다. 그러나 공격자는 RSA 비밀키 하나만 있으면 희생자 파일을 모두 복호화할 수 있게 된다.
왜냐하면 RSA 비밀키로 희생자 파일을 복호화하면, 그 후에는 파일 자체에 들어있는 AES키로 해당 파일을 복호화하면 되기 때문이다."



 ▷6.2 네트워크 관점에서

이 챕터에서는 랜섬웨어의 활동을 네트워크 포렌식 관점으로 접근해 분석하였다. 먼저 랜섬웨어는 myexternalip.com에 접속하여 [그림 11]와 같이 희생자의 공인IP를 알아낸다. 이 정보는 추후에 공격자의 C&C서버에 전송되며, 희생자를 식별하는 키 값의 일부로 사용된다.


[그림 11 - 희생자의 공인IP정보 획득]


그 후에, [그림 12]와 같이 공인IP정보를 포함한 희생자 시스템의 정보를 암호화하여 C&C서버로 전송한다. 해당 패킷에서 공격자 서버는 latinmoves.com이다. 그러나 이 뿐만 아니라 희생자는 여러 개의 C&C서버로 접속을 시도한다. 그 이유는 이용하는 서버의 대부분이, 악의적이지 않은 일반적인 웹 사이트이기 때문인데, 공격자는 취약점이 존재하는 웹 사이트를 해킹하여 공격에 사용되는 파일이나 코드를 심어놓는다. 그리고 그것을 악성코드 배포 및C&C 서버로 이용한다. 이러한 사이트의 취약점이 패치된다면 더 이상의 공격이 불가능하다. 따라서 하나의 서버가 불능이 될 것을 대비하여 여러 개의 서버를 마련해 놓는 것이다.


[그림 12 - 희생자 정보 전송]


[그림 13 - 공격자 서버 정보]

[그림 13]은 패킷 분석 결과 발견된 공격자 서버의 URL과, 그것에 해당하는 IP이다. 이 사이트들에게 모두 패킷을 전송하나, 대부분의 서버는 다운되어 500번 에러 메시지로 응답한다. 그러나  이 중 살아있는 공격자 서버에 연결되면, 서버로부터 [그림 14]와 같이 "---!!!INSERTED!!!---" 의 응답이 온다.


[그림 14 - 서버로부터의 응답]




 ▷V3 진단 결과

마지막으로 AhnLab V3에서의 이 악성코드의 진단명은 Trojan/Win32.Teslacrypt.R168154이다. 사용자가 해당 악성코드를 다운로드할 시 V3는 파일을 즉각 삭제한다. 또한 V3는 악성코드 진단 및 치료 뿐만 아니라 유해 사이트 차단기능까지 제공한다. 공격 과정에서 접속하는 [그림 13]의 URL에 접근할 시에는, 해당 공격 사이트를 악성 사이트로 진단하고 [그림 16]와 같이 접속을 차단한다.


[그림 15 - 유해 사이트 접속 차단]


[그림 16 - 악성코드 진단 및 삭제]






[참고 사이트]
  http://asec.ahnlab.com/1032
  http://www.isightpartners.com/2015/09/teslacrypt-2-0-cyber-crime-malware-behavior-capabilities-and-communications/

[참고 문헌]
  Cryptowall Verson 3 Threat, Cyber Threat Alliance




(잘못된 내용은 아래 메일로 제보해 주시면 수정하도록 하겠습니다.)