CHAMCHICON SEASON 1: Automatic decoding of highly obfuscated PowerShell code

드디어 제 1회 참치콘 3주여 앞으로 다가오고 있다. 크지 않은 행사로 조그마하지만 강력한 주제들을 선정해서 제한된 실무 그룹들이 모여서 정보를 공유하는 모임으로 5월 9일과 10일 양일간 저녁 시간에 열린다. 장소는 판교 근처로 섭외중이다. 왜 내가 참치콘을 기획했는지는 김치콘, 참치콘, *치콘을 참고해 보기를 바란다. 연재를 통해서 지금까지 치열한 경쟁을 뚫고 선정된 몇몇 세션들에 대해서 간략하게 설명해 보는 자리를 가질까 한다.


첫번째 세션은 본인의 세션이다. 스스로 그래도 가장 실용성과 시류성이 있다고 생각하는 주제를 선택하였다. 말도 많고 탈도 많은 파워쉘. 파워쉘 없이는 윈도우즈 보안을 얘기할 수 없는 시점에 와 있다. 이에 대한 주의를 환기 시키고, 기술적으로 어떻게 효율적으로 파워쉘 위협을 분석할 수 있는지에 대해서 이야기 한다.

  • Speaker: Matt Oh
  • Duration: 50 minutes
  • Type: Technical

This session will focus on the strategic approach to decode highly obfuscated PowerShell code using automatic method.

이제 파워쉘이 엔터프라이즈 보안의 가장 큰 골치 거리라는 사실은 누구도 부정할 수 없다. 하지만 요즘에 웬만한 악성 파워쉘 코드치고 난독화 안된 파워쉘은 드물다. 하지만, 그러한 여러 겹으로 난독화된 파워쉘을 푸는 일은 대부분 수동적인 노동에 의지를 하거나, 그냥 샌드박스에서 실행하는 형태로 이뤄진다. 파워쉘 이벤트를 떠 보고 대략 행동을 짐작하기도 한다. 하지만, 항상 동적 분석은 코드 커버리지라는 난제를 남기게 된다. 코드 상에 어떠한 샌드 박스나 가상 환경 내지는 여러 시스템 변수를 체크하는 코드들이 존재할 경우, 전체 코드가 실행되지 않고 이른바 bail out 하는 현상이 발생하게 된다. 이 세션을 통해서 실제 예제를 가지고, 수동으로 분석하는 경우를 산정하고 어떻게 효율적인 자동 분석 시스템을 설계할 수 있을지, 그리고 그 범위와 한계는 어떻게 될지에 대해서 알아 본다.

대부분의 파워쉘 위협들은 여러가지 이유로 커맨드 라인에 모든 파워쉘 statements들을 넣는 경향이 있다. 하나의 파워쉘 명령으로 원하는 모든 행위들을 시작시킬 수 있다는 장점도 있고, 은근히 인코딩을 통한 보안 프로그램들 evasion 효과도 누릴 수 있다. 파워쉘 코맨드는 디폴트로 Base64 인코딩을 지원하는데, 이는 간단히 CyberChef 등의 툴로 풀 수 있다. 조금더 복잡하게 압축까지 시켜 놓은 파워쉘 커맨드의 경우는 여기에 나오는 스크립트와 비슷한 것을 만들어서 풀 수 있다. 놀랍게도 이 과정조차도 힘들어 하는 분석가들이 많이 있다 – 믿지 못하겠지만 사실이다. 현재 사이버 시큐리티 인력들의 수준과 한계를 보여 준다고 할 수 있다.

그렇다면, 이렇게 풀어 놓은 파워쉘이 문법적으로 난독화(obfuscation) 되어 있을 경우에는 어떻게 풀어야 할까? 파워쉘의 경우에는 어차피 소스 코드 형태로 배포되기 때문에 커머셜한 스크립트의 경우에는 여러 레벨의 난독화 (obfuscation)을 지원하는 경우가 있다. 예를 들어서 ISESteroids 2.5.1.0 의 경우 변수명, 함수명, 스트링 들에 대한 간단한 레벨의 난독화를 제공한다. 하지만, 실제 환경에서 만날 악성 파워쉘 스크립트들은 이렇게 호락 호락한 방법을 쓰지 않는다.

파워쉘은 기본적으로 Invoke-Expression cmdlet을 비롯해서 여러 종류의 expression evaluation/invoke 방법을 제공한다. 본질적으로 string을 evaluation할 수 있는 방법으로서 결국 string을 obfuscation하는 방식에 따라서 무한대의 obfuscation 방법이 가능하게 되는 것이다. 이것은 x86 플랫폼에서 쉘코드로 self modification이나 새로운 메모리에 인코딩 된 쉘코드를 decoding하고 jump하는 방식으로 obfuscation 을 수행하는 방법과 닮은꼴이다. 결국 이러한 방식의 파워쉘을 사람이 이해하기 쉽게 풀어 내는 방법은 조금 어렵다.

먼저 가장 쉽게 접근할 수 있는 방법은 파워쉘 스크립트 트레이싱인데 사실 이 방법은 강력하기는 하지만 스크립트 블락 단위로 execution을 보여 주기 때문에 실제 마이크로한 행위를 볼수가 없고, 완벽하게 의미를 가진 스크립트 블락을 볼 수 없는 경우도 많아서 전체적인 파워쉘 수행 과정을 이해하는데에 한계가 있는 경우가 많다.

예를 들어서 다음과 같이 완전한 Base64 텍스트 형태로 전달 되는 파워쉘은 굉장히 흔한 형태이다.

Iranian Threat Group에 의해서 사용된 파워쉘 (from
https://www.fireeye.com/blog/threat-research/2018/03/iranian-threat-group-updates-ttps-in-spear-phishing-campaign.html)

CyberChef를 사용해서 간단히 디코딩 하면, 다음과 같은 스크립트를 얻을 수 있다.

CyberChef 디코딩 결과

디코딩 결과를 잘 살펴 보면, 또다른 인코딩 된 스트링이 임베드 되어 있음을 알 수 있다. 해당 스트링을 커스터마이즈된 Python 스크립트로 디코딩해 보면 다음과 같다.

다음 레벨의 난독화 코드

이 코드는 그 자체로 난독화 처리가 되어 있어서 인간 리서쳐가 제대로 읽고 분석하기가 굉장히 어렵다. 에너지가 넘치는 분석가들은 이러한 코드도 일일이 수동으로 수정해 가면서 다시 돌리는 방식으로, 아니면 코드를 beautify하는 방식으로 전체 과정을 재구성하려는 노력을 하고는 한다. 많은 경우에 일반적으로 굉장히 스킬이 좋은 리서쳐의 경우 적게는 반나절 길게는 하루의 시간을 투자해야 전체적인 그림이 나오게 된다.

이 토크에서는 그동안 잘 알려지지 않았던 아주 간단하면서도 강력한 파워쉘 디코딩, 분석 방법에 대해서 논의할 예정이다. 어느 정도의 자동화가 가능하고, 여기에서 공유된 지식과 코드를 통해서 자가 분석 플랫폼을 구축할 수도 있다. 실제 말웨어 샘플이 제공될 예정이고, hands-on이 가능하다. 이 세션을 통해서 전문가가 하루종일 분석해야 하는 내용을 10분에서 한시간 사이에서 전체 스크립트의 의미를 이해할 수 있을지에 대해서 알아 보기 바란다. 관심 있으신 분들은 다음에 나오는 정보를 참조하여 예약하기 바란다.


*참치콘 예약 정책: 다음 링크에 들어가서 참가 신청 가능하고, 참가자 신분 확인 절차 거칠 예정입니다. 참치콘에서 공유된 정보는 외부에 공개 불가하고, 다만 기업 내 환경에서 적용과 팀내 공유는 가능합니다.

May/9/2019 (Thr) – Technical Sessions

Full day ticket

StartEndNameSpeakerDescription
17:0017:20The Hitchhiker’s Guide to the Cloud SecurityJune Park
17:2018:10Automatic Decoding of Highly Obfuscated PowerShell CodeMatt OhDescriptionTicket
18:1018:40Non-ActiveX + IOT = OLLEH 🙂XXXXXDescriptionTicket
18:4019:00Tea break/buffer
19:0019:50Practical Threat HuntingsommaDescriptionTicket
20:0020:50Betrayal of Reputation: Trusting the Untrustable Hardware and Software with ReputationSeunghun Han
21:0021:50Recent Android Kernel Exploitation: KNOX Kernel Mitigation Bypassesx82DescriptionTicket

May/10/2019 (Fri) – Intelligence Sessions

Full day ticket

StartEndNameSpeakerDescription
17:0017:504차 산업혁명시대 지능형 제어기기 보안Jungmin KangTicket
18:0018:50Do not blame your parents: from plastic spoon to personal TI environmentEMNSTRDescriptionTicket
19:0019:30주제 비밀 (특정 액터 연구)hypenTicket
19:3020:00해커그룹 004 의 공격패턴과 특징, 그리고 흔적JC Lee
20:0020:50PE보다 스크립트 – 핵인싸 악성코드의 진단 우회방식jzDescriptionTicket
21:0021:50Tick Tock Tick tock – Tick 그룹의 동아시아 지역 10년 활동mstoned7Ticket

May/9/2019 (Thr) – Technical Sessions

Full day ticket

StartEndNameSpeakerDescription
17:0017:20The Hitchhiker’s Guide to the Cloud SecurityJune Park
17:2018:10Automatic Decoding of Highly Obfuscated PowerShell CodeMatt OhDescriptionTicket
18:1018:40Non-ActiveX + IOT = OLLEH 🙂XXXXXDescriptionTicket
18:4019:00Tea break/buffer
19:0019:50Practical Threat HuntingsommaDescriptionTicket
20:0020:50Betrayal of Reputation: Trusting the Untrustable Hardware and Software with ReputationSeunghun Han
21:0021:50Recent Android Kernel Exploitation: KNOX Kernel Mitigation Bypassesx82

May/10/2019 (Fri) – Intelligence Sessions

Full day ticket

StartEndNameSpeakerDescription
17:0017:504차 산업혁명시대 지능형 제어기기 보안Jungmin KangTicket
18:0018:50Do not blame your parents: from plastic spoon to personal TI environmentEMNSTRDescriptionTicket
19:0019:30 주제 비밀 (특정 액터 연구)
hypenTicket
19:3020:00해커그룹 004 의 공격패턴과 특징, 그리고 흔적JC Lee
20:0020:50PE보다 스크립트 – 핵인싸 악성코드의 진단 우회방식jzDescriptionTicket
21:0021:50Tick Tock Tick tock – Tick 그룹의 동아시아 지역 10년 활동mstoned7Ticket

* 참치콘 스케쥴표: https://darungrim.com/intelligence/Chamichicon-2019-05.html

One thought on “CHAMCHICON SEASON 1: Automatic decoding of highly obfuscated PowerShell code

Leave a Reply