안녕하세요, 환영합니다.
이 동영상에서는 멀웨어 분석 및 리버싱에 API 후킹을 사용하는 방법을 보여드리겠습니다.
리소스 섹션에서 Panda Banker 빈을 다운로드하고 바탕화면에 악성코드 샘플이라는 폴더를 만든
다음 여기에 넣으세요.
그런 다음 x64dbg를 관리자로 열고 판다 뱅커를 열겠습니다.
따라서 그 전에 이벤트 탭의 x64dbg에 대한 옵션 기본 설정에서 시스템 중단점과
콜백을 선택 해제하고 항목 중단점만 선택된 상태로 둡니다.
저장을 클릭합니다.
그런 다음 판다 뱅커를 엽니다.
이를 클릭하고 데스크톱의 멀웨어 코스 샘플 위치로 이동한 다음 여기에서 모든 파일로 변경합니다.
이것을 클릭하고 엽니다.
따라서 이제 여는 순간 진입 지점에서 깨집니다.
여기에서 확장해 보겠습니다.
진입 지점.
따라서 API 후킹의 타이밍은 멀웨어가 사용하는 가장 일반적인 API에 중단점을 설정하는 것입니다.
먼저 VirtualAlloc에 중단점을 설정하는 것으로 시작하겠습니다.
Enter
키를 누릅니다. 가상 보호의 중단점.
Enter 키를 누릅니다. 가상 할당 및 가상 보호는 멀웨어가 코드 압축을 풀려고 할 때 사용되는 API를 트래핑하는
데 사용됩니다.
그래서 이 두 가지에 중단점을 설정했습니다.
다음으로, 중단점을 설정해야 하는 안티 분석도 있습니다.
첫 번째는 IsDebuggerPresent입니다.
Enter 키를 누릅니다.
그리고 다른 하나는 CreateToolhelp
32 스냅샷입니다.
따라서 이 함수는 메모리에서 실행 중인 프로세스 목록을 열거하는 데 사용됩니다.
Enter 키를 누릅니다.
그리고 다른 하나는 프로세스 32First의 중단점입니다.
이것은 실행 중인 프로세스 목록을 반복하기 위해
CreateToolhelp
32 스냅샷과 함께 사용됩니다.
Enter 키를 누릅니다. 다음은 중단점
프로세스
32 다음입니다. 이것은 메모리에서 실행 중인 프로세스 목록을 반복하기 위해 CreateToolhelp32Snapshot과
함께 사용됩니다.
따라서 CreateToolhelp32Snapshot은 Process32First 및 Process32Next와 함께 실행되어
메모리에서 실행 중인 전체 프로세스를 나열합니다.
다음은 CreateFile입니다.
따라서 중단점을 설정해야 합니다. 유니코드 버전의 경우 CreateFileW를, 다른 하나는 ASCII
버전의 경우 Create FileA를 사용합니다.
Enter 키를 누릅니다.
따라서 CreateFile API는 어떤 파일이 쓰거나 읽히는지 추적하는 데 사용되며,
멀웨어가 시스템에 안티 분석 도구가 설치되어 있는지 확인하기 위해 사용되기도 합니다.
다음은 CreateProcessInternalW의 중단점입니다.
따라서 이것은 멀웨어가 이미 압축을 푼 코드를 실행하는 시점을 추적하는 것입니다.
이제 멀웨어가 압축을 풀 때 VirtualAlloc과 VirtualProtect를 사용하고, 그
후에는 CreateProcessInternalW를 사용하여 압축을 푼 코드를 실행합니다.
그래서 저희는 여기에 브레이크포인트도 설정했습니다.
지금 중단점 탭을 보시면 제가 설정한 중단점이 모두 여기에 있습니다.
가상 할당, CreateFileW, 가상 보호, IsDebuggerPresent, CreateFileA, CreateProcessInternal
W, CreateToolhelp32스냅샷, Process32Next 및 Process32First.
이제 실행할 준비가 되었습니다.
따라서 실행을 누르면 VirtualProtect에 연결됩니다. 그리고 가상 보호는 특정 메모리 영역에 대한 권한 비트를
변경할 것입니다.
여기에서 매개변수를 실제로 살펴볼 수 있으며, MSDN을 참조하여 VirtualProtect에 전달되는
모든 매개변수의 의미를 확인할 수 있습니다.
하지만 이 경우에는 이 특정 멀웨어에 대해 그다지 중요하지 않기 때문에 여기서 논의할 필요는 없습니다.
따라서 실행을 누르면 여기에 VirtualAlloc에 대한 매개변수도 모두 허용됩니다. 그리고 VirtualAlloc은 코드 압축을 풀기
위해 메모리에 공간을 할당하며, 여기에 대한 매개변수는 다음과 같습니다.
또한 검색을 통해 MSDN 또는 Microsoft를 참조하여 매개 변수의 의미를 확인할 수도 있습니다.
이 글만 계속하겠습니다. 가만히 달리기.
VirtualAlloc. VirtualAlloc.
한 번 더 클릭합니다. VirtualAlloc을 다시 실행합니다.
VirtualAlloc. 그래도 계속 클릭하세요.
알겠습니다. 이제 몇 가지 파일을 읽을 것입니다.
이제 실행을 클릭하고 어떤 파일을 읽으려고 하는지 확인해 보겠습니다.
알겠습니다.
이 프로그램이 설치되어 있는지 확인하고 이제 이 파일을 확인합니다.
알겠습니다.
이제 Wireshark 라이브러리가 설치되어 있는지 확인합니다.
이것은 Wireshark에서 사용하는 라이브러리입니다.
따라서 지금 계속 실행하면 이 멀웨어가 안티 분석 시스템의 일부이기 때문에 종료됩니다.
따라서 Wireshark용 라이브러리인 WinPcap과 Wireshark 자체도 제거해야 합니다.
제거하지 않으면 분석을 계속할 수 없습니다.
그러니 그냥 제거하세요.
여기로 이동하여 프로그램 추가/제거를 찾습니다.
추가/제거를 클릭합니다.
프로그램 추가/제거를 클릭한 다음 설치된 모든 파일 목록에서 아래로 이동하여 마지막 두 파일인
WinPcap과 Wireshark를 제거합니다.
따라서 Remove Pcap을 마우스 오른쪽 버튼으로 클릭합니다.
제거를 클릭합니다. WinPcap은 이 IP와 이 IP입니다.
따라서 WinPcap을 제거해야 합니다.
따라서 제거를 마우스 오른쪽 버튼으로 클릭합니다.
여기에서 제거를 클릭합니다.
나중에 가상 머신 복원 기능을 사용하여 언제든지 복원할 수 있으니 걱정하지 마세요.
마침을 클릭합니다.
이제 와이어샤크를 제거하므로 와이어샤크를 마우스 오른쪽 버튼으로 클릭하고 제거합니다.
다음을 클릭하고 다음을 다시 클릭합니다.
제거를 클릭합니다.
이제 준비가 완료되었습니다. 자체적으로 제거합니다.
다음을 다시 클릭합니다.
마침을 클릭합니다.
이제 WinPcap과 Wireshark를 제거했습니다.
이제 이 테스트를 통과했습니다.
따라서 CreateFile은 파일의 존재 여부를 확인하는 데 사용됩니다.
따라서 이 경우에는 다시 실행할 수 있습니다.
이제 CreateToolhelp 32Snapshot을
사용할 것입니다. 이전에는 CreateFile을 사용하여 파일의 존재 여부를 확인했습니다.
파일이 존재한다면, 예를 들어 Wireshark와 같은 분석 방지 프로그램을 설치했다는 뜻입니다.
그러나 CreateToolhelp
32스냅샷은 메모리에서 이미 실행 중인 항목을 확인하는 데 사용됩니다.
이것이 CreateToolhelp와 CreateFile의 차이점입니다.
이제 메모리에서 와이어샤크가 실행 중인지 확인 중이지만 와이어샤크를 시작하지 않았으므로
안전하게 계속할 수 있습니다. 이제 면역 디버거가 메모리에 열려 있는지 확인합니다.
계속 실행됩니다.
이제 프로세스해커를 확인하고 있지만 프로세스해커를 실행하고 있지는 않습니다.
프로세스 탐색기를 확인합니다.
실행을 클릭합니다. 프로세스 모니터를 확인합니다.
실행을 클릭합니다. 이제 IDA, IDA Pro를
확인합니다.
그래서 지금은 메모리에서 IDA Pro를 열지 않으므로 안전하게 계속할 수 있습니다.
실행을 다시 클릭합니다.
이제 x64dbg가 실행 중인지 확인합니다.
실행 및 AutoIt v3를 클릭합니다.
그들은 달립니다. 이제 Perl이 실행 중인지 확인합니다.
실행을 클릭합니다. Python이 실행 중인지 여부.
실행을 다시 클릭하고 중요하지 않은 일부 파일을 확인합니다.
계속 실행하세요.
실행을 클릭합니다.
이제 이 모든 것을 확인하고 있습니다.
이러한 유형의 항목을 모두 발견하면 종료됩니다.
중요하지 않습니다.
그러니 그냥 실행하세요.
다시 실행합니다.
그리고 다시.
다시 실행합니다.
실행.
알겠습니다. 이제 이 위치가 열리므로 이 위치도 열 수 있습니다.
파일을 드롭하려고 할 수도 있습니다.
이제 가보겠습니다.
이제 이 항목을 클릭하고 실행 상자를 연 다음 AppData라는 가변 환경
경로 변수를 입력하면 됩니다.
AppData.
따라서 퍼센트 기호가 상단에 표시되며 이 경로를 나타냅니다.
확인을 클릭합니다.
이제 앱데이터\로밍을 살펴본 다음, 다음에 어떤 일이 일어날지 살펴보겠습니다.
그러니 계속 달리세요.
알겠습니다.
그리고 여기 스택에서 무언가가 보입니다.
이 부분을 왼쪽으로 당기면 전체 경로를 볼 수 있습니다.
앱 데이터\로밍의 이
위치에 파일을 드롭하려고 합니다. 이제 그곳에 가서 그 위치를 검사하고 점검하고 어떤 일이
벌어질지 확인할 수 있습니다.
따라서 머신에 따라 다를 수 있습니다.
따라서 머신에 npm-cache가 표시되지 않는다면 특정 사례에 표시되는 것을 따라야 합니다.
제 컴퓨터의 경우 npm-cache가 표시되므로 여기에서 이를 따라 캐싱해 보겠습니다.
밑줄을 추가합니다.
캐시, 콘텐츠-v2, sha1, 01, EC 순으로
이어집니다. 다음은 삭제된 파일입니다.
이 세 가지 파일입니다.
그래서 다음은 떨어질 것입니다.
확장자가 메모인 이 파일이 있으니 여기로 가서 클릭하여 실행하면 어떤 일이 일어나는지 확인할 수 있습니다.
알겠습니다.
파일을 삭제한 것 같습니다.
가서 확인해 보겠습니다.
여기까지입니다.
이 파일이 삭제되었습니다.
이제 이 위치에 드롭할 다음 파일은 이 파일입니다.
그리고 그것은 흥미롭습니다.
알겠습니다. 이제 실행해보고 어떤 일이 일어나는지 확인하세요.
실행.
이제 폴더를 검사해 보겠습니다.
여기 있습니다.
하지만 현재로서는 여전히 0입니다.
즉, 아무것도 기록하지 않았다는 뜻입니다.
파일만 생성되었지만 여전히 빈 파일입니다.
이제 계속 실행하여 무언가를 복사할지 여부를 확인해 보겠습니다.
이 시점에서 사용자 코드 실행으로 이동하여 이 파일에 쓰는지 여부를 확인할 수 있습니다.
이제 여기 사용자 코드로 이동합니다.
자, 이제 사용자 코드에 들어갑니다. 이제 어떤 일이 벌어질지 살펴봅시다.
아직 없습니다.
그럼 계속 달려보겠습니다.
좋아요, VirtualAlloc.
이제 여기서 무슨 일이 일어나고 있는지 살펴보겠습니다.
알겠습니다.
아직 아무 것도 기록하지 않았습니다.
하지만 무언가를 할당하는 동안 계속 실행해
봅시다.
알겠습니다.
이제 파일을 읽고 쓸 것입니다.
이제 매개 변수가 이 파일임을 알 수 있습니다.
알겠습니다. 이제 사용자 코드로 이동하여 확인할 수 있습니다.
이 API를 호출하여 이 exe 파일을 열고 이제 어떤 작업을 수행하는지 살펴보겠습니다.
여기에 쓰게 될 것 같습니다.
이제 F8 키를 누르고 계속 밟고 넘어가 보겠습니다.
알겠습니다. 이제 글을 쓸 차례입니다. 현재로서는 여전히 0입니다.
그리고 스택에서 이것을 작성하는 것을 볼 수 있습니다.
이제 MSDN에서 이 API를 참조할 수 있습니다.
Microsoft MSDN이며, 여기에서 WriteFile의 API를 볼 수 있습니다.
두 번째 매개변수는 대상에 쓰는 데 사용되는 버퍼입니다.
그리고 이것이 목표입니다.
여기에서 설명을 볼 수 있습니다. 버퍼는 파일에 기록할 데이터를 포함하는 포인터이며,
파일은 첫 번째 매개변수입니다.
따라서 두 번째 매개변수는 버퍼입니다.
이것이 WriteFile의 매개변수이며, 여기 스택의 매개변수인 스택과 비교할
수 있습니다.
따라서 첫 번째 매개변수는 파일 핸들이고 두 번째 매개변수는 버퍼입니다.
이제 이걸 따라가면 됩니다. 마우스 오른쪽 버튼을 클릭하고 덤프의 단어를 따라갑니다.
여기에서 확인할 수 있습니다.
따라서 이 주소는 exe 파일에 쓸 때 사용할 버퍼입니다.
exe 파일은 이 파일입니다.
현재는 여전히 0바이트입니다.
그래서 이 모든 것을 가져와서 이 파일에 기록할 것입니다.
이것이 바로 이 API의 매개변수의 의미입니다.
따라서 이 파일은 헤더에 MZ 매직 바이트가 있고 '이 프로그램은 DOS 모드에서 실행할 수 없습니다'라는
문자열의 확인이
있으므로 실행 파일입니다. 따라서 이것은 실행 파일
자체입니다.
알겠습니다.
이제 이 WriteFile을 살펴봅시다.
닫을 때까지 실행합니다.
손잡이가 닫힐
때까지 한 발짝 내딛습니다.
알겠습니다.
따라서 이 CloseHandle은 이 CreateFile에 대한 CloseHandle입니다.
이제 돌아가서 크기를 확인합니다.
145킬로바이트인 것을 알 수 있습니다.
이 버퍼를 이 파일에 복사했습니다.
그리고 해시를 사용하여 어떤 파일인지 확인할 수 있습니다.
이제 이 파일의 해시를 가져와 보겠습니다.
마우스 오른쪽 버튼을 클릭하고 MD5 해시합니다.
그리고 이것은 MD5 해시입니다.
해시를 복사한 다음 메모장을 엽니다.
메모장을 엽니다.
그리고 여기에 해시를 붙여넣습니다.
따라서 이 파일은 알 수 없는 파일입니다.
알 수 없는 파일에 물음표를 표시한 다음 이 파일이 실제로 Panda Banker의 사본이라고 의심합니다.
따라서 Panda Banker로 이동하여 이것도 해시를 가져와서 해시를 찾을 수 있습니다.
그리고 해시를 복사하여 여기에 넣고 동일한지 확인합니다.
알겠습니다.
판다 뱅커입니다.
해시인 MD5 해시가 동일한 파일임을
알 수 있습니다.
따라서 이 위치의 숨겨진 폴더, 숨겨진 디렉토리에
스스로를 복사했다는
의심이 확인되었습니다.
이제 컴퓨터의 경우 동일한 위치가 아닐 수 있으므로 컴퓨터에 표시되는 내용에 따라
적절히 변경해야 할 수 있습니다.
다음 영상에서 이 분석을 계속 이어가겠습니다.
시청해 주셔서 감사합니다.