Friday, January 4, 2019

320 Malware 분석

2018-12-20

320Malware 분석

  • 정적분석

    • tool : PEView, exeinfo, md5checksum, bintext

 
[ 크기가 같은 세개의 PE ]
파일의 크기가 같으니 의심



[ MD5 Checksum ]
'AmAgent'와 '5fcd6e' 가 같은 헥사값
같은 파일임이 증명




[ Exeinfo PE ]
Subsystem : Windows GUI - exe파일임을 증명
Lamer : 겉햝기식



[ 컴파일러 6.0 version  => Visual Studio 6.0 ]



[ .text ]
대체적으로 코드값이 들어있음



[ IAT ]
사용한 dll과 주소들



[ BinText ]
///PhysicalDrive  -  드라이브로 직접접근흔적-> 의심
taskkill /F /IM pasvc.exe  -  Ahnlab의 정책관리.exe를 끄기
taskkill /F /IM Clisvc.exe  -  하우리(바이로봇)의 정책관리.exe를 끄기
SeShutdownPrivilidge



  • Binary Diffing

    •  tool : diffing tool, DarunGrim

[ 전체적인 그림으로 먼저 파악 ]



[ INC  : 1씩 증가 ]



[ for문 ]




[ 코드난독화  : 헥사값에 의존불가능 ]



[ ROR : Rotate Right ]
ROL : Rotate Left

Shitf연산 

1)Left Shift 2)Right Shift

0001 ROR: 0010 ROL: 1000 Left Shift: 0010
(두번하면 0100=4, 세번하면 1000=8(hex)>2의배수) 
Right Shift: 1000 
(두번하면 0100=4,나누기2)


[ LODS ESI : ESI -1byte하면서 읽기 ]
LOOPD : ECX값만큼 00302383-LOOP 



[ ECX가 zero면 jump ]



[ CLEAR DIRECTION FLAG ]



파일읽고 쓰기 방법

  1. 파일열기

     CreateFile, 파일읽기: ReadFile, 파일쓰기: WriteFile. 파일닫기: CloseHandle

  2.MMF(memory mapped file)

     파일의 모든 정보를 메모리 주소에 맞춰서 mapping. kernel이 file이라 생각하지 않고 메모리 주소라고 인식해서 찾아서 연결해줌

[ CreateThread ]













안티 디버깅과 안티 리버싱에 대한 정보

2018-12-19 

TLS Callback 함수 

     (TLS : Thread Load Storage­)

   :  TLS초기화 코드 실행 기획


[ 안티디버깅 소스 ]



[ Immunity Debugger로 읽을수 없음 /디버깅이 불가능함 ]

따라서, 우회하기
->PEView로 읽어보기



[ PEView ]
Image Base + TLS Table(RVA) = TLS Table이 있는 주소(VA)



[ callback의 주소확인(00402198)과 비슷한곳 확인 ]



[ Immunity debugger ]
디버깅 옵션을 변경



[ data값은 ???.. 주소로 검색,  00401000으로 읽기 ]



[ 메인함수이동구간 수정해서 우회 ]
함수시작하는 부분 찾아가서 main함수부분을 binary->fill with nops



[ 우회성공 ]



Packer : Installer(실행압축)

[game.exe+game.inf+knife+dll]--[압축]--->[압축파일+압축해제코드+설치코드]=setup.exe

   ; 실행파일이 스스로 실행파일의 압축을 풀고 실행 //소프트웨어 배포
   ; packer종류 -UPX, ASPack, Armandilo

   환경 : upx-3.95-win32



[ 압축 ]



[ PEiD - 압축한 파일을 읽을 수 있음 ]




[ 위의 소스코드를 리버싱해서 packer인지 확인해보기]
Realese-upx, packer -> Immunity debugger로 리버싱해보기



[ UPX0 , UPX1 ]
압축한 파일을 푸는 코드
=>이게 확인되면 unpacking 하면 됨
(MUP: Manual Unpacking)



[ PUSHAD ]
 모든 Register를 차례대로 Stack에 PUSH (==PUSH ALL)
<-> POPAD : 차례대로 Stack에서 POP(꺼내오기)



00407000 : UPX1의 시작주소 : ESI
00401000 : UPX0의 시작주소 : EDI



[ ADC(ADD CARRY) ]
덧셈이지만 음수값이 나올수 있다라는 의미 ex.(-1)+(-1)=-2



Protector

(실행파일을 만들어 Protector을 돌리면 코드가 뒤죽박죽)

  • 코드난독화, 코드 암호화, 안티 디버깅
  • 종류: ASProtect, Themida


  • 코드난독화 

        "문자열"-->분리저장+실행직전에결합=>실행


[ 소스설정 ]

5. 취업관련
1)ComputerForensics -AnalogForensics
:법->침해사고분석(침해대응팀*CERT)
2)문서보안(DLP,DRM)



안티 디버깅 소스를 만들고 우회하기

2018-12-18

SW취약점 

  1. 포렌식
  2. 침투테스트/탐지대응
  3. ROOTKit
  4. BotNet(UDP)=DDoS(zombie)
  5. Ransom Ware

ANTI DEBUGGING

[ IsDebuggingPresent ]
안티디버깅 함수
디버깅을 감지하는 함수




[ Immunity Debugging을 이용하여 함수 확인 ]



[ 어셈블리어를 직접 삽입해서 프로그래밍 ]
mov eax, fs:[30h]



[ Immunity Debugging로 경로확인하며 디버깅시도 ]
mov eax, fs:[30]부분이 메인함수 근처이므로 그 아래부분을 우회시켜 debugging



[ FindWindow ]
창이름에 지정 단어가 있으면 반응하는 함수



[참고]

Segment Register(Segment Selector)
CS(Code Segment Register)
DS(Data Segment Register)
SS(Stock Segment Register)
ES(Extra Segment Register)
FS: FSRegister로 가면 TEB구조체 
(TEB구조체에서 PEB구조체로 이동->Being Debugged변수)
GS

윈도우 DLL의 이해_1. Hooking

2018-12-17 
WINDOWS 
    - dll, exe 
  
LINUX 
    - so PE file



Windows 의 DLL 검증


[ LoadLibrary , GetProcAddress , FreeLibrary ]




[ DLL 프로젝트에 DLL_dll을 dll로 추가 ]




[ dll 의 소스코드 ]
dwReason
EXPORT : 함수호출
DWORD : 함수호출x



[ DLL이 없는 경우 ]



[ DLL이 없는 경우 ]


  • VAS(Virtual Address Space)

[ VAS ]



  • Library(Lib)

    • Static Link Library 
      • Link (compile = bulid될때) 라이브러리가 실행파일 안에 들어가 있다.  따라서, PE file하나만 


    • Dynamic Link Library
      • build하는 시점이 아니라 나중에 compile됨.
      • 내용변경하려면 Sll은 전체를 수정, Dll은 하나만 해도 ㅇㅋ


    • 나중에의 경우 


      • Load Time Link 
        • exe가 메모리에 로딩될 때 필요한 dll이 같이 로딩되는 방식
        • cons. dll이 하나라도 문제가 생기면 exe가 안됨

[ pexplorer.exe 에서 pexdll2.dll이 없는 경우, Process Explorer 의 반응 ]
pros. loading할 때 빠름 (무겁게 모두 로딩할 필요가 없으니까)



  • INT(Import Name Table) & IAT(Import Address Table)

  ; 어떤 dll에 어떤 함수가 필요한지 정리해놓은 표 (exe)

  • ENT(Export Name Table) & EAT(Export Address Table)

  ; 나한테 정리해놓은 표가 있으니 쓰시오 (dll)

  • C++ 함수 오버로딩 

  ; 같은 이름의 함수, 다른 매개변수

# SIEM(Security information and event management) <--발전--ESM(Enterprise Security Management)



# SPYWARE

KERNEL을 통해 DLL로 훔쳐오기

  • Hooking 기법 (Hook procedure 설치)

    • Hook procedure 설치

           : 커널이 함수에 갈고리를 걸어줌

    • Message Hook

           : GetMessage()에 갈고리를 거는 hook ===>kernel의 기본적인 기능을 악용

[ 메인함수의 소스코드 ]
SetWindowsHookEx
SetWindowsHookEx(hook procedure, hook함수, hook함수dll, 0)



[ dll 함수의 소스코드 ]
GetMassage 가 실행될 때 hooking인 GetMsgProc이 먼저 실행되고, GetMassage가 실행(선택적)




[ 위의 코드를 Debugging ]



[ 만들어진 exe와 dll의 RealMemory, notepad에서의 VAS ]



[ 위의 exe를 실행하였을때 ProcessExplorer반응 ]
kerneldl.exe 작동중임을 확인




keygen을 이용하여 key4 우회

2018-12-14



 [=문자를 숫자로 바꾸는 함수]

FF : 부호없는(unsigned) 자료형: 255/ 부호있는(signed) 자료형: -1
MOVSX(move signed extantion)
 -->25를 SX->00010101=왼쪽이 0이면 음수--->00000025
LODS : Load String 메모리에서 값을 가져옴
LOOPD : ECX값을 사용한다
IMUL : 부호있는 자료형의 곱셈


 [ 이부분을 고대로 카피해서 이 부분의 결과를 해결해 keygen 구하기 ]



strlen :c표준 함수
lstrlen: win32 표준함수





List

MobSF

MobSF는 오픈소스 모바일 앱 자동 보안 진단 프레임워크로 자동 분석 시스템 구축할 때 사용한다. 정정 및 동적 분석이 가능하며, Android, iOS, Windows에 대해 침투 테스트, 멀웨어 분석 및 보안 평가를 할 수 있다. 참고자료 필...