Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
관리 메뉴

보안교과서

[SeSAC 성동캠퍼스] 어플리케이션 보안_취약점 진단 본문

SK쉴더스

[SeSAC 성동캠퍼스] 어플리케이션 보안_취약점 진단

dogeconfig 2023. 11. 16. 18:00

ipv4(현재의 인터넷 프로토콜) vs ipv6

 ipv4의 한계인 주소 표현의 제약으로 인한 주소고갈, 멀티미디어서비스 대응 미약 등을 고려하여

ipv4 vs ipv6 비교

PE파일이란 

PE(Portable excutable) 파일은 원도우 상에서 실행할 수 있는 프로그램을 말한다. 

 

FAT32 용량 제한이 있다 .(8GB)

클러스터 크기가 크면 클수록 속도는 빠르지만 공간 낭비가 심하다.

API Hooking

API(application programing interface)

window os에서는 사용자 어플리케이션이 시스템 자원을 사용하고 싶을 떄 직접 할 수 있는 방법이 없다고 한다.

왜냐하면 그것들은 os가 직접 관리하며, 여러가지 이유로 사용자 어플리케이션의 직접적인 접근을 막아놓아서

가능하게하려면 application은 시스템 커널(system kernel)에게 요청해야합니다 . 요청 방법이 ms에서 제공한  api 를 이용하는 것

hooking 

리버싱에서 후킹은 정보를 가로채고, 실행 흐름을 변경하고, 원래와는 다른 기능을 제공하는 기술입니다.

- 후킹 전체 프로세스 -

  • 디스어셈블리/디버거를 이용하여 프로그램 구조,동작원리 파악
  • 버그 수정 또는 기능 개선에 필요한 hook 코드 개발  [ ]
  • 실행 파일과 프로세스 메모리를 자유롭게 조작하여 hook 코드 설치 

FUZZER

실행파일

Frida

java script로 만들었다 .

FileMon for Windows - Sysinternals

 

visual studio로 들어가서 

terminal 창에

pip install frida frida-tools

 

cmd 입장 

cmd 창 

frida 

echo %path%

die /a /s frida.exe

 

visual studio에서 

자바스크립트 실행 .js 

var hook_createprocess = Module.getExportByName(
    "Kernel32.dll",
    "CreateProcessW"
  ); // 해당 함수의 주소를 리턴함
  
  Interceptor.attach(hook_createprocess, {
    onEnter(args) {
      var lpApplicationName = args[0];
      console.log(lpApplicationName);
    },
    onLeave(result) {},
  });

코드 입력

exit 후 본인의 explore.exe 콘솔 포트를 확인해야한다

활동하면 밑에 뜸 

메모리 침투 디버깅

var hook_createprocess = Module.getExportByName(
    "Kernel32.dll",
    "CreateProcessW"
  ); // 해당 함수의 주소를 리턴함
  
  Interceptor.attach(hook_createprocess, {
    onEnter(args) {
      var lpApplicationName = args[0];
      console.log(Memory.readUtf16String(lpApplicationName));
    },
    onLeave(result) {},
  });

https://learn.microsoft.com/ko-kr/windows/win32/api/processthreadsapi/nf-processthreadsapi-createprocessa#syntax

 

 

CreateProcessA 함수(processthreadsapi.h) - Win32 apps

새 프로세스 및 기본 스레드를 만듭니다. 새 프로세스는 호출 프로세스의 보안 컨텍스트에서 실행됩니다. (ANSI)

learn.microsoft.com

참조해서 lpCommandLine 라인 추가 

BOOL CreateProcessA(
  [in, optional]      LPCSTR                lpApplicationName,
  [in, out, optional] LPSTR                 lpCommandLine,
  [in, optional]      LPSECURITY_ATTRIBUTES lpProcessAttributes,
  [in, optional]      LPSECURITY_ATTRIBUTES lpThreadAttributes,
  [in]                BOOL                  bInheritHandles,
  [in]                DWORD                 dwCreationFlags,
  [in, optional]      LPVOID                lpEnvironment,
  [in, optional]      LPCSTR                lpCurrentDirectory,
  [in]                LPSTARTUPINFOA        lpStartupInfo,
  [out]               LPPROCESS_INFORMATION lpProcessInformation
);

 

 

var hook_createprocess = Module.getExportByName(
    "Kernel32.dll",
    "CreateProcessW"
  ); // 해당 함수의 주소를 리턴함
  
  Interceptor.attach(hook_createprocess, {
    onEnter(args) {
      var lpApplicationName = args[0];
      console.log(Memory.readUtf16String(lpApplicationName));
  
      var lpCommandLine = args[1];
      console.log(Memory.readUtf16String(lpCommandLine)); // 인자값까지 출력됨
    },
    onLeave(result) {
      console.log(result);
    },
  });

 

dll (dynamic linking library)

OS/2, 윈도 등의 운영 체계(OS) 본래 기능으로 소프트웨어의 루틴을 몇 개의 파일로 나누어 디스크에 두고 필요한 것만을 실형 메모리에 실어서 사용하기 위한 파일. DLL로 사용되는 파일은 확장자가 ‘dll’로 되어 있기 때문에 ‘DLL 파일’이라고 부른다. DLL의 장점은 루틴을 공통으로 사용하는 것이다. 루틴의 함수 집단을 자료집(library)이라 하는데, 보통 실행 파일을 작성할 때 자료집을 포함해서 컴파일하는 경우가 많다. 그러나 이 방법은 동일 루틴을 다수의 실행 파일이 갖는 것으로 되어 비효율적이다. DLL은 다수의 실행 파일에 공유될 수 있기 때문에 디스크 용량이나 메모리를 절약할 수 있다. 또 프로그램을 수정하려는 경우, DLL 파일만을 수정함으로써 완료되는 경우도 있다. 윈도 등에서는 OS 기능은 물론 DLL을 애플리케이션과 공유할 수도 있으며, DLL 파일 등의 애플리케이션이 공유되고 있는 것은 이용자 수준에서 판단하기는 어렵다.