APT가 보안 분야에서 화제가 되었습니다.
Eleven Paths의 자회사인 Innovación y Laboratorio는 지난 4월 "Docless Vietnam APT" 보고서를 발표했습니다.
위 정보에 따르면 일부 악성 이메일이 베트남 정부 소유의 사서함으로 전송된 것을 감지했습니다. . 이 베트남어 이메일의 날짜는 2019년 3월 13일입니다. 해당 이메일에는 베트남 정부 내부에서 발송된 것으로 추정되는 의심스러운 요소가 포함되어 있으나, 누군가가 보안부에 이메일을 보냈을 가능성도 배제할 수 없습니다.
TKCT quy I nam 2019.doc.lnk.malw 샘플 정보는 다음과 같습니다.
그림 1: TKCT quy I nam 2019.doc.lnk.malw
사진 2: 문서 바로가기 위장
우선, 문서는 일반적으로 .lnk 링크가 아닙니다. 링크 크기는 1kb 정도여야 하지만, APT 샘플 바로가기는 126kb로 다른 바이러스가 숨겨져 있는 것이 분명합니다. 파일 이름은 .dat, .docx 등입니다. 실제로 접미사는 .exe이며 파일 이름 확장자를 켜면 볼 수 있습니다.
2. 샘플 속성에서 대상에 포함된 악성 코드를 추출하여 아래와 같이 난독화되고 암호화된 cmd 명령인지 확인하고 powershell을 실행합니다.
그림 3: 난독화된 명령
APT 공격 방법은 매우 널리 사용됩니다. vbs, powershell, js 및 기타 유형의 스크립트 언어는 혼동 및 암호화가 쉽고 바이러스 백신 처리에 편리합니다.
그래서 과거의 바이러스와 맬웨어는 이러한 공통점을 가지고 있습니다. 예를 들어 Manlinghua, Xbash 및 랜섬웨어는 모두 첫 번째 "페이로드"로 powershell을 실행하여 컴퓨터에 깜짝 선물을 주는 것을 좋아했습니다.
3. 난독화된 지침을 분석한 결과 TKCT quy I nam 2019.doc.lnk 바로가기가 s.sp1 파일로 리디렉션된 것을 발견했습니다. 실제로 데스크톱 바로가기는 Powershell 스크립트 파일로 정렬되어 있습니다.
마지막으로 TKCT quy I nam 2019.doc.lnk를 임시 폴더로 리디렉션하고 이름을 s.ps1로 지정하고 아래와 같이 powershell을 실행합니다.
그림 4: Deobfuscate
4. iex 난독화를 수동으로 제거할 수도 있습니다. 파일을 열고 "iex" 문자를 제거합니다. powershell 실행 명령 형식은 다음과 같습니다. 파일 이름(원본) >> 리디렉션 파일은 다음과 같습니다.
그림 5: Powershell 악성 코드
5 그림 5에서 볼 수 있듯이 PowerShell은 인코딩된 악성 데이터를 실행하고 예약된 작업을 추가하려는 의도를 가지고 있습니다. 9분마다 생성을 실행합니다. InstallUtil 서비스를 사용하여 자체 시작 및 지속성을 달성하고 흥미롭게도 Wscript.Shell을 사용하여 실행하면 아래와 같이 예상치 못한 효과가 더 커집니다. 그림 6: s.sp1
6. Base64로 인코딩된 데이터를 파싱한 결과 실제로는 악성 .net과 .doc라는 두 개의 실행 파일이 있습니다. 실행 방법은 아래 그림과 같습니다.
그림 7: 일반 루틴
7. tmp_pFWwjd.dat.exe를 분석한 후 dnSpy 도구로 분해한 후 약간의 혼란이 있지만 코드는 명확하게 보입니다(de4dot.exe를 사용하여 난독화할 수 있음). 코드 수준에는 영향을 미치지 않습니다.
주요 함수인 Exec()을 찾아 Base64String으로 인코딩된 데이터를 찾습니다. 실행 프로세스에 따라 .NET에서는 Call 함수를 호출하도록 위임하고, 이를 읽고 쓸 수 있도록 하려면 VirtualAlloc() 메모리를 적용하고 복사해야 합니다. 아래와 같이 메모리에서 CreateThread() 포인터를 얻고 콜백 포인터를 위임하여 악성 쉘코드를 실행합니다.
그림 8: .net 디스어셈블리
셸코드나 페이로드를 이해하는 방법은 무엇입니까? 기본적으로는 16진수 데이터의 묶음이라고 할 수 있습니다. 실행 파일의 경우 어셈블리 엔진에서 해석하고 실행할 수 있는 데이터입니다.
다음에는 바이너리 데이터 추출 및 어셈블리 분석이 포함되므로 쉘코드 또는 페이로드(악성 코드용)의 기본 개념을 소개하는 간단한 그림은 다음과 같습니다.
그림 9: 페이로드
바이러스, 특히 자체 시작 및 지속적인 공격의 경우 백도어 없이 구현하기가 어렵습니다(지속적인 취약점 악용, 데이터 도난을 위해 매번 소량의 트래픽을 끌어오는 경우 제외).
예를 들어, ASLR 주소 무작위화의 기본 주소는 시스템이 다시 시작될 때마다 변경되거나, 코드 자체의 함수 기본 주소가 잘못되었습니다. ? 물론 완벽한 작동을 위해서는 몇 가지 추가 작업이 필요하지만 이는 문제가 되지 않으며 기술도 비교적 성숙되어 있습니다.
독자가 Windows PE 형식, 어셈블리 및 커널에 대한 특정 지식을 가지고 있다고 가정하면 다음 지식 설명이 더 쉽게 이해될 것입니다. PE 형식과 어셈블리 레벨에서 이러한 쉘코드를 수행하는 방법, kernel32.dll과 같은 모듈 기본 주소를 동적으로 얻는 방법, 해시 값 또는 해시를 사용하여 내보내기를 탐색하는 방법을 분석하겠습니다. 테이블을 보호하고 민감한 함수 API 등을 종료하지 마세요.
위의 악성 코드를 예로 들면, .net에서 쉘코드 디버깅 중에 많은 문제가 발생했기 때문에 우리는 c/C++를 사용하여 tmp_pFWwjd.dat.exe 샘플을 복원했습니다.
다시 한번 말하지만, OD는 동적 디버깅에 사용됩니다. 물론, 개인 취향에 따라 아래와 같이 쉘코드 실행 시 직접 중단할 수도 있습니다.
그림 10: 포인터
1. 진입점을 입력하면 데이터 XOR 복호화는 아래와 같이 실제로 실행해야 하는 악성 코드를 복원합니다.
그림 11: XOR 복호화
2. 이 이점은 쉘코드의 크기를 줄일 수 있을 뿐만 아니라 아래와 같이 바이러스 백신 소프트웨어로 쉽게 가로챌 수 없는 민감한 문자를 숨길 수 있습니다.
그림 12: 해시 값 획득 기능 주소
3. 함수 1E0A42를 입력했는데 평범해 보이는 할당이 많이 발견되었습니다. 작업은 다음과 같습니다.
그림 13: fs:[0x30]
Fs는 레지스터이고 커널 상태는 fs = 0x30, 사용자 상태 fs = 0x3B, fs는 커널 상태에서 _KPCR을 가리키고, 사용자 상태는 _TEB를 가리킵니다.
TEB(Thread Environment Block), 스레드 환경 블록, 즉 각 스레드에는 TEB가 있으며, 이는 작업 제어를 용이하게 하기 위해 시스템과 스레드 간에 데이터를 저장하는 데 사용됩니다. 그러면 Fs:[0x30]은 PEB 프로세스 환경 블록입니다.
4. PEB는 현재 프로세스 환경입니다. 쉘코드는 오프셋 0xc를 통해 _PEB_LDR_DATA를 얻습니다. 이 구조에는 프로세스의 로드된 모듈에 대한 정보가 포함됩니다.
각 오프셋을 통해 양방향으로 연결됩니다. 연결된 목록은 이 구조에 포함된 데이터를 살펴보겠습니다. 위의 데이터 오프셋은 아래와 같이 운영 체제와 관련됩니다.
그림 14: 모듈 매트릭스 가져오기
그림 15: 현재 환경 모듈의 기본 주소를 가져오는 단계
5. 위의 과정을 통해 아래와 같이 ntdll.dll을 성공적으로 얻을 수 있습니다.
그림 16: 모듈 주소 가져오기
6 . 두 개의 매개변수가 있는 함수 1E0B2A를 계속 분석합니다. 함수 호출 규칙에 따르면 매개변수 1은 kernel32 기본 주소이고 매개변수 2는 함수 이름의 해시 값이며 이 함수는 자체 구현된 GetProcAddress( ) 함수는 아래와 같습니다.
그림 17: GetProcAddress
이 함수의 목적은 PE 표준 형식을 준수하는지 확인하고 NT 헤더 및 내보내기 테이블을 가져오는 것입니다. 내보내기 테이블은 세 개의 테이블의 주소를 저장합니다. 먼저 아래와 같이 내보내기 테이블 구조를 살펴보겠습니다.
악성 코드는 이 세 테이블의 주소를 찾아 함수 이름 테이블 AddressOfName을 탐색하고 함수 이름을 얻어 해시 값을 계산해야 합니다. 해시 값이 매개변수 2와 동일하면 동일한 기능.
현재 순회된 첨자를 반환하고, 첨자를 사용하여 함수 시퀀스 번호 테이블 AddressOfNameOrdinals로 이동하여 해당 시퀀스 번호를 찾고, 시퀀스 번호 테이블에 저장된 값을 얻고, 함수 주소 테이블에서 AddressOfFunctions 사이의 관계를 얻습니다. 셋은 아래 그림과 같이 간단히 표현됩니다.
그림 18: 셋이 서로 연관되어 있습니다
위 그림과 같이 일련번호표와 이름표가 일대일로 대응되며 아래첨자는 아래 첨자에 저장된 값과 관련됩니다. 이 세 테이블은 데이터베이스 개념을 활용하여 교묘하게 설계되었습니다.
일련번호가 순서가 맞지 않아 공백이 있을 수 있으니 주의하세요. 주소 테이블의 일부 기능에는 기능 이름이 없습니다. 즉, 주소 테이블에는 주소가 있지만 이름 테이블과 연결할 수 없습니다. 이 때 일련 번호 내용과 기본 일련 번호가 사용됩니다. 기본 주소는 실제 호출 번호입니다.
8. 이러한 이해를 바탕으로 샘플 속 악성코드를 살펴보면 아래와 같이 위의 설명과 완전히 동일함을 알 수 있습니다.
그림 19: GetProcAddress( )
9. 아래와 같이 최종 확인 결과가 성공적입니다.
그림 20: Verification
11. 스레드 콜백이 디렉터리와 파일을 생성하지만 로컬 확인이 이루어집니다. 아래와 같이 파일이 생성됩니다.
그림 21: 디렉터리 생성
파일 및 디렉터리 이름 경로 생성 c:User...AppDataRoaming
11.서버 응답 및 악성코드 다운로드. 아래와 같이 새로운 여정이 시작됩니다:
그림 22: DownLoader
1. 위 함수 호출과 일치하는 함수 주소입니다.
1E0AAA 함수 해독은 다음과 같습니다.
2. 함수 이름을 보면 다음에 무슨 일이 일어날지 추측해야 합니다. 무슨 일이 일어나는지는 아래와 같습니다:
Picture 23: InternetOpenA
Picture 24: InternetConnectA
Picture 25: HttpOpenRequestA
3. 동적 디버깅 프로세스, 요청 시 카드가 중단되고 코드가 정적으로 분석됩니다. lstrcmpiA는 다운로드한 데이터의 지문 정보 텍스트 필드를 비교하여 일반인지 확인한 다음 InternetReadFile을 사용하여 다운로드한 데이터를 읽고 실행합니다. 그렇지 않으면 절전 모드에 들어가 무한 루프를 요청하게 됩니다.
그림 26: 요청 상태
알려진 IP와 요청 형식을 기반으로 아래와 같이 웹페이지에 직접 액세스합니다.
그림 27: vkT2
발견 웹 구문 분석 모든 횡설수설? 로컬로 다운로드하고 원래 코드 실행 프로세스를 따르십시오. 이는 이전 규칙에 따라 이 악성 코드를 디버깅하는 프로그램을 작성합니다.
4. vkT2 분석의 경우 먼저 데이터를 해독한 다음 함수 주소를 동적으로 가져옵니다. 이는 샘플에서 사용하는 오래된 루틴입니다.
각 섹션(섹션 테이블)의 데이터가 순환 연결됩니다. 여기서 VirtualAddress에 따라 메모리에 로드된 후 각 섹션의 주소가 순환 연결됩니다. DOS 헤더 기능 코드는 0x1000입니다. 그림 28: 메모리 확장
5 PE 형식이 메모리로 확장되었으므로 다음 단계는 IAT 테이블을 복구하고 이는 PE 형식 콘텐츠에도 속합니다. 아래 그림과 같이 "Windows Definitive Guide"를 확인할 수 있습니다.
그림 29: IAT 복구6. 요점을 파악하고, 시스템 변수를 얻어서 실행 여부를 확인합니다. 64비트 시스템에서는 다음과 같습니다.그림 30: 운영 환경 확인
8. 데이터, 호스트 IP, 호스트 이름 및 기타 정보는 아래와 같습니다.
그림 31: 데이터 수집 9. 다음 다이어그램과 같이 새로운 C&C 통신이 시작됩니다.그림 32: 통신 설정
추가 분석을 위해 HttpOpenRequest 및 HttpSendRequest 함수를 사용하여 파일을 열 수 있습니다. HttpOpenRequest는 요청 핸들을 생성하고 핸들에 매개변수를 저장합니다.
Picture 33: HttpOpenRequest
Picture 3 : HttpSendRequestA11. 아쉽게도 HttpSendRequeSt의 응답이 없습니다. 남은 코드의 정적 분석(시뮬레이션 실행), 서버에서 반환된 악성 코드 읽기 및 스레드 안전 컨텍스트가 유용합니다.
지능 분석에서는 더 가치 있는 데이터를 찾지 못했지만 이 요청 방법은 매우 독특하며 구성된 데이터 패킷도 매우 특별합니다.
샘플 프로세스를 연결하면 코밍 실행 흐름도는 다음과 같습니다.
그림 35: TKCT quy I nam 2019.doc 실행 프로세스 그림 35, 클라이언트 통신을 위한 서버는 모두 프록시여야 합니다. 실제로, 서버의 실제 환경은 위의 과정보다 훨씬 복잡하고, 이는 소스 추적에도 어려움이 있습니다. 그림 33과 같이 스택 메모리에서 핵심 데이터 정보가 추출됩니다. 이는 우리가 보는 일반적인 요청 데이터와 다릅니다.APT 통신 방법이 점점 더 조심스러워지고 있습니다. , 상세한 샘플 분석을 수행하지 않는 경우 샌드박스 시뮬레이션 작업, 메모리 포렌식, 패킷 캡처 도구를 사용하여 네트워크 수준을 분석하면 결과가 원하는 데이터와 다소 다를 수 있습니다. 샘플이 통신하면 실제로 도메인 프론트에 도달합니다. 끝. 사이버 공격 기술.
도메인 프런트엔드 네트워크 공격 기술이란? 간단히 말하면, msf나 cs(Cobalt Strike) 같은 팀은 어느 정도 방화벽이나 탐지기를 우회하기 위해 서버 트래픽을 제어할 수 있습니다. 일부 대형 제조업체에서는 서비스를 제공하므로 msf나 cs와 같은 도구를 사용하여 우회할 수 있습니다. 방화벽과 탐지기를 어느 정도 실현할 수 있습니다.우리는 브라우저 관련 정보를 얻기 위한 사이트 복제를 포함하여 포트 전달, 다중 모드 포트 리스너 검색, Windows exe 프로그램 생성, Windows dll 동적 링크 라이브러리 생성, Java 프로그램 생성, Office 매크로 코드 생성을 통합하는 Cobalt Strike를 예로 사용합니다. 정보 등
더 유용한 기능 중 하나는 Beacon 페이로드의 동작, 프레임워크의 기본 속성 값 수정, 체크인 빈도 변경 및 Beacon 네트워크 트래픽 수정입니다. 이러한 기능의 구성은 파일에 있습니다. 가단성 C2.
Malleable-C2-Profiles 기능은 일반적인 웹 위장 트래픽을 구성하고 최종적으로 통신 숨김 효과를 얻을 수 있습니다. 아래와 같이 amazon.profile을 예로 들어 보겠습니다.
set useragent "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko";http-get {Seturi"/s/ref=nb_sb_noss_1/167-3294888-0262949/field-keywords=books";client {header "Accept" "*/*";header "Host" " www.amazon.com ";metadata {base64;prepend "session-token=";prepend "skin=noskin;";append "csm-hit=s-24KU11BB82RZSYGJ3BDK|1419899012996";header "Cookie";}http-post {set uri "/N4215/adj/amzn.us.sr.aps";client {header "Accept" "*/*";header "Content-Type" "text/xml";header "X-Requested-With" "XMLHttpRequest";header "Host" " www.amazon.com ";parameter "sz" "160x600";parameter "oe" "oe=ISO-8859-1;";id {parameter "sn";}parameter "s" "3717";parameter "dc_ref" "http%3A%2F%2F www.amazon.com ";}
위 코드는 샘플 vkT2와 통신합니다. .shellcode 해당 프로파일 파일을 로드하면 대상 호스트와 서버의 트래픽 특성이 완전히 일치하여 트래픽을 숨기고 궁극적으로 통신 숨김 목적을 달성합니다.
위 내용은 베트남 APT 공격 샘플에 대한 심층 분석을 수행하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!