Wanna Cry talk about the Ransomware CERTIS Wanna
Wanna. Cry talk about the Ransomware 부경대학교 CERT-IS 안지원
Wanna. Cry 01. Background 02. Vulnerability 03. Analysis 04. Etc 05. Qn. A
01 Wannacry Background Vulnerable OS -Windows 8. 1 -Windows RT 8. 1 -Windows 7(x 64) -> pick! -Windows Vista -Windows XP -Windows Server 2016 -Windows Server 2012 R 2 -Windows Server 2008 R 2 SP 1 SP 2 -Windows Server 2003
02 Wannacry Vunerability FEA(Extended Attributes) 즉, 파일이나 디렉터리의 속성 정보를 담고 있는 구조체 형태로 SMB에서는 Full Extended Attributes(FEA)라는 구조체 사용해 이를 표현한다.
02 Wannacry Vunerability FEA(Extended Attributes) SMB_FEA_LIST - 가장 첫번째 값으로 FEA_LIST의 크기 저장(4 bytes) - 그 아래에는 여러 개의 FEA 배열을 가짐
02 Wannacry Vunerability FEA(Extended Attributes) SMB_FEA - EA flag(1 byte) - EA Name Legnth(1 byte) - EA Value Length(2 byte) - EA Name[EA_Name_Length+1(NULL) - EA Vaule[EA_Value_Length] : EA는 Name/Value값을 쌍으로 갖고 있으며, 각 값의 길이는 FEA 구조체의 앞부분에 저장하고 있다.
02 Wannacry Vunerability FEA 주요함수 Call Srv. Os 2 Fea. List. Size. To. Nt() FEALIST의 크기를 구하고, 이를 Nt. FEA 포맷으로 바꿨을 때의 Nt. FEA 크기 반환 Srv. Os 2 Fea. List. To. Nt() FEALIST를 Nt. FEA 포맷으로 변환 call Srv. Allocate. Non. Paged. Pool() Src. Os 2 Fea. List. Size. To. Nt()가 리턴한 값의 크기만큼 Nonpaged pool 할당 call Srv. Os 2 Fea. To. Nt() FEALIST의 내용을 Nt. FEA 포맷에 맞추어 할당된 Nonpaged pool에 memmove
02 Wannacry Vunerability How to call Srv. Os 2 Fea. List. To. Nt()? - Srv. Smb. Nt. Transaction() -> Execute. Transaction() -> Srv. Smb. Open 2() -> Srv. Os 2 Fea. List. To. Nt() - Srv. Smb. Nt. Transaction() : SMB 프로토콜을 통해 모든 Data를 받고나면 Execute. Transaction() 호출 Data 모두 받으면, FEALIST를 Nt. FEA로 변환하는 과정(Srv. Os 2 Fea. List. To. Nt()를 통해) 이뤄짐 - Execute. Transaction() : call dispatch table Target is command 0, Srv. Smb. Open 2() functions
02 Wannacry Vunerability How to calculate the size of FEALIST? 그림 1) 그림 2) 1. LIST_Pointer에 4 byte(LISTSIZE 크기) 더해서 FEA 시작부분 찾음 2. List 끝 가리키는 LIST_End_Pointer 구함 -> FEA 하나크기에 대한 정보는 각 FEA 앞부분(FEA_Header)에 담겨있음 FEA_Size = FEA_Header(4)+EAName_Length+EAValue_Length 3. 그렇게 하다보면 LIST_END_Pointer 만남(그림 1) 다음 FEA_Pointer>=LIST_End_Pointer가 되면 LIST의 끝에 도달했다는 뜻이므로 LIST_END_Pointer 넘지않는 FEA를 마지막 FEA로 인식하고 LISTSIZE를 계산한 후 갱신 -> 여기서 취약점 발생
03 Wannacry Analysis extension 이런 식으로 저장되어 있음
03 Wannacry Analysis Host file operation 7. 변경 - @Please_Read_Me@. txt 텍스트 파일 - 바탕 화면 배경을 @Wana. Decryptor@. bmp파일로 변경
03 Wannacry Analysis Host file operation 8. 파일 암호화 및 결제 안내 - HKCUSOFTWAREMicrosoftWindowsCurrent. VersionRun -> “C: UsersAn. Gee. WonDesktoptasksche. exe” = 사용할 때 결제 안내 메시지가 지속적으로 생성됨
03 Etc Analysis Function - Write. File 위의 함수는 0 x 60파일에 0 x. A 89400를 0 x 4000만큼 기록 0 x 60='C: UserstopyabbbDesktopx. wnry’ ex) c. wnry
04 API Etc API using malware DLL injection Resource - Open. Process - Load. Resource - Virtual. Alloc. Ex - Sizeof. Resource - Write. Process. Memory - Lock. Resource - Load. Library. A - Fress. Resource - Get. Proc. Address - Find. Resource. A - Create. Remote. Thread Registry Encrypt - Reg. Set. Value. Ex. A - Crypt. Create. Hash - Reg. Enum. Value. Ex. A - Crypt. Hash. Data - Reg. Delete. Key. A - Crypt. Get. Hash. Param - Reg. Create. Key. Ex. A - Crypt. Acquire. Context. A - Open. Process. Token Identifying Specific files - Write. File, Istrcmpi. A - Read. File, Delete. File. A - Create. File. A, Copy. File. A - Create. Process. A - Find. First. File. A
Qn. A
- Slides: 27