320x100

멀웨어 분석 실습

 

base64

  • base64는 이진 데이터를 ASCII 문자로 인코딩하는 방법

 

인코딩 vs 암호화 차이점

  • (인코딩은 쉽게 여러 웹사이트에 있는 디코딩을 통해서 복원이 가능하지만, 암호화는 복원을 위한 암호화 키가 필요)
  • 인코딩은 데이터의 형식을 변경하여 저장하거나 전송하기 쉽게 만드는 것이며, 쉽게 복원할 수 있습니다. 보안 목적이 아닙니다.
  • 암호화는 데이터를 보호하기 위한 방법으로, 권한이 없는 사용자가 읽지 못하도록 변환하며, 복원하려면 암호화 키가 필요합니다. 보안 목적이 있습니다.

eml_analysis 분석 실습

 

파일을 열면 아래와 같이 알수없는 글씨가 나오는 것을 확인할 수 있습니다.

 

 

CyberChef는 데이터 변환 및 조작을 위한 웹 기반 도구로, 다양한 인코딩, 디코딩, 암호화, 해시 생성, 포맷 변환 등의 기능을 제공

https://gchq.github.io/CyberChef/  

 

위의 사이트를 이용해서 암호화되어 있는 텍스트를 붙여넣기 + From Base64 클릭

아래와 같이 복원된 텍스트를 확인 할 수 있다.

 

Output을 보기 쉽게 텍스트 파일에 옮기고 확인한 결과 

첨부파일이 존재한다는 것을 식별하였다.

 

 

onlineform.html 파일이 첨부가 되어 있는 것을 아래와 같이 식별

 

이메일의 아랫 부분 암호화된 파일도 똑같은 과정을 통해 복호화(디코딩) 진행

 

아래와 같이 스크립트가 출력이 되는 것을 확인

 

숫자 중간 중간 %는 스페이스의 역할을 하는 것으로 추정된다.

메모장에 옮긴 파일의 %를 스페이스로 모두 대체한다.

 

그 이후, Hxd 를 통해 분석 시작

*HxD는 이진 파일 편집기이자 헥스 에디터로, 파일의 내용을 헥사(16진수) 형식으로 보고 편집할 수 있는 소프트웨어입니다. 주로 데이터 복구, 바이너리 파일 분석, 포렌식, 프로그래밍 및 디버깅 등의 작업에 사용됩니다.

 

 

이와같은 방식으로 이메일속 멀웨어를 분석할 수있음.

 

 

참고자료

  • CVE or 한글 CVE (이글루나 안랩에 올라와 있는 공통 취약점을 파악 할 수있음)
  • PostScript는 주로 프린터와 그래픽 디스플레이 용도로 사용되는 페이지 설명 언어입니다. 이 기술은 그래픽과 텍스트의 출력 형식을 정의하는 데 사용되지만, 악성코드가 PostScript를 통해 구현될 수 있는 가능성도 있습니다.
  • 한글 파일 내에서 임의의 코드를 실행할 수 있는 스크립트는 일반적으로 매크로 또는 스크립트 언어를 사용하여 작성됩니다. 예를 들어, 한글 프로그램에서는 HWP 파일 내에 매크로를 삽입하여 특정 작업을 자동화하거나 사용자 정의 기능을 추가할 수 있습니다.
  • OLE 파일은 다양한 데이터를 하나의 파일 내에 효과적으로 포함하고 연결할 수 있는 유용한 방식입니다. 이 기술을 활용하면 문서의 가독성과 기능성을 높일 수 있습니다.

 


hwp_analysis 분석 실습

 

주어진 파일의 압축을 푼다.

'코로나바이러스 대응 긴급 조회' 파일을 연결프로그램으로 반디집을 클릭해서 열게 되면 아래와 같은 창을 볼 수 있다.

 

*반디집은 다양한 파일 압축 및 해제 기능을 지원하는 프로그램으로, 여러 가지 파일 형식을 처리할 수 있습니다

 

의심스러운 파일을 찾아서 매모장으로 열음

 

HxD에 붙여넣기

 

오른쪽 디코드 된 부분을 메모장으로 가져와서 분석한다.

 

이와같은 방법을 통해 hwp 파일을 분석할 수 있다.

 

발전한 해킹기법

  • 요즘 해커들은 사용자의 의심에서 벗어나기 위하여 일정기간동안 바이러스 파일이 실행되지 않게 실행을 잠깐 멈춰놓고 사용자가 의심하지 않을때쯤 프로세스를 실행시켜 공격한다. 
  • 해커는 사용자의 설정 영역 일부를 읽어 현재 가상환경인지 local환경에서 프로그램이 실행되는지 확인을 하고 실행여부를 조정할 수 있다.

분석실습 (실행환경 Ubuntu 22.4 )

 

GDB

GDB는 GNU Debugger의 약자로, 프로그램의 디버깅을 위해 사용되는 강력한 도구입니다. 주로 C, C++, Fortran 등의 언어로 작성된 프로그램을 디버깅하는 데 사용됩니다.

 

초기환경 세팅

 

  • sudo apt update  // 이 명령어는 패키지 목록을 업데이트합니다. 즉, 시스템이 사용하고 있는 소프트웨어 저장소에서 최신 패키지 정보를 가져옵니다.
  • sudo apt install gdb  // GDB를 시스템에 설치합니다. apt는 패키지 관리 도구로, install 옵션은 지정한 패키지를 설치하는 기능을 수행합니다.
  • 주어진 파일 다운
  • sudo apt install unzip  // unzip 명령어는 Linux 시스템에서 unzip 패키지를 설치하기 위한 명령어입니다. 각 부분에 대한 설명은 다음과 같습니다.
  • unzip Handson_dist.zip
  • shell chmod 755 ./handson5 // handson5 파일의 권한을 소유자에게 읽기, 쓰기, 실행 권한을 부여하고, 그룹 및 다른 사용자에게는 읽기 및 실행 권한을 부여합니다.
  • gdb -q handson5  // GDB를 조용한 모드로 실행하여 handson5 프로그램을 디버깅합니다.
  • set disassembly-flavor intel  // GDB에서 어셈블리 코드를 Intel 구문으로 출력하도록 설정합니다.
  • info func  // 현재 디버깅 중인 프로그램 내의 함수 목록을 표시합니다.(우리가 분석해야할 대상확인)

 

  • disassemble main

 

  • run

 

  • x/4gx $rdi // 핵스로 나타내라

 

x/s $rdi // 문자로 나타내라 (내가 사전에 입력한 숫자가 나오는 것을 확인할 수 있다.)

 

n or s 동작이 동일하다.

이 다음의 코드가 실행이 된다.

n : next step 다음에 있는 줄을 실행해라 라는 의미 ( 어느 주소로 뛰든 예를 들어 call 안에 함수들을 한줄로 보고 한줄로 실행을 시키고 다음으로 넘어감)

s : step into ( 예를 들어 call 이 함수의 주소 1080 주소 안으로 한바퀴가 들어가게 된다.)

 

 

Breakpoint 설정하는법 (예시) - 1, 2, 3 이런식으로 순서대로 설정이 된다.

b *main+118

Breakpoint 를 지우는 법

delete 1 or 2 or 3

내가 설정한 포인트를 하나씩 지울 수 있음

info breakpoints 를 통해서 내가 가지고 있는 브레이크포인트를 확인할 수 있음.

 

기드라에서 코드 분석한 내용을 바탕으로

r 1000 982 를 각 인자에 임의로 집어넣어서 Done 표시를 나타낸다 (전날 자료 참고)

 

 

결론, breakpoint를 활용하여 코드를 쪼개보며 분석을 한다.

 


IDA Freeware

  • 바이너리를 역으로 분석해주는 툴 / 프리웨어 버젼으로 다운

SSH

  • 윈도우 상에서 shell 을 연결할 수 있게 해서 가상환경에서 명령어를 동작할 수 있게 한 명령어

$ ssh-keygen

  • Enter 키를 세 번 눌러 기본 설정을 사용합니다. 이렇게 하면 ssh 키 쌍이 생성됩니다

curl

  • 데이터 전송을 위한 명령줄 도구로, 다양한 프로토콜(HTTP, HTTPS, FTP, FTPS, SCP, SFTP 등)을 사용하여 데이터를 전송할 수 있습니다.

 

  • curl {address} > install.sh
  • sudo sh install.sh

가상환경 코드를 Window 화면에서 동작시키기

Window PowerShell 에서 ssh-keygen 입력

 

scp .ssh/id_rsa.pub ubuntu@192.168.1.71:~/.ssh/authorized_keys

 

1. VScode -> extension -> Remote - SSH 설치

2. Ctrl + Shirt + P  누른 후 ssh config 

 

IdentiyFile 라인 추가해서 로컬 경로 설정

HostName :  내가 remote 할 가상환경(Ubuntu) IP 주소

Hose, User 이름 설정 

 

Ctrl + Shirt + P  누른 후 remote ssh connect

-> ubuntu 클릭

 

새로운 VSCode가 열린다면 성공

-> Linux 클릭 -> 터미널 열기

 


System Security - Strange Upgrade 문제

 

문제에 적혀져 있는 주소 그대로 복사하여 vscode terminal 에 붙여넣기 

 

아래와 같은 문제가 나옴

IDA tool을 이용해서 파일을 분석해야함

 

IDA 기본 단축키

  • F5/Tab : Decompile/Change View : 바이너리보다 더 편하게 볼 수 있다.
  • N: Rename : 함수 또는 변수의 이름을 바꾼다.
  • Double Clike: Enter : 해당 함수에 들어갈 수 있다.
  • ESC : 뒤로가기
  • TAB : 코드와 테이블 전환 가능(코드 보는 방식을 바꿀 수 있음) 

 

 

IDA 실행 -> open -> 파일열기 -> OK -> 테이블 형식으로 보여지는데 TAB 버튼을 통해 코드로 확인 

 

 

코드분석을 위해 main함수 더블클릭 

 

단축기 N (rename) 을 이용해 하나씩 변수가 어떤 역할을 하는지 확인하고 이름을 보기 좋게 바꾼다.

첫번째 함수

 

두번째 함수

 

세번째 함수

 

네번째 함수

 

최종 rename된 코드

Command injection

리눅스에서는 명령어를 연결해서 사용할 수 있는데 그러기 위한 특수문자들이 존재한다.

;(세미콜론) 여러 명령어를 순차적으로 실행

&&(AND) 첫 번째 명령어가 성공적으로 실행될 경우(종료 상태가 0인 경우)에만 두번째 명령어를 실행

|| (OR) …. 등등

기본 명령어에 특수문자를 맨앞에 집어넣으면 다른 명령어를 연결해서 인젝션 공격을 할 수 있다. 이것을 커멘드 인젝션 공격이라고 함

ex)

; cat

 

 

아래와 같이 커멘드 인젝션 공격을 통해서 빈 공간에 ls 를 치고 flag 를 cat flag 를 통해 가져올 수 있게 한다.

 

 

* vi 를 사용해서도 같은 결과를 도출해 낼 수 있다.

 


 

System Security - SigMe 문제

 

문제 확인

신호 핸들러(signal handler)는 운영 체제에서 특정 신호를 수신했을 때 실행되는 사용자 정의 함수입니다. 신호는 프로세스 간의 비동기적 통신 방법으로, 특정 이벤트가 발생했을 때 프로세스에 알림을 보내는 역할을 합니다. 예를 들어, 사용자가 프로그램을 종료하려고 할 때 발생하는 SIGINT 신호가 있습니다.

 

IDA를 통해 파일을 열고 main 함수 확인

 

Signal

  • 프로세스 외부에서 발생한 이벤트를 프로세스에게 알려주는 인터럽트
  • 프로세스 외부에서 발생한 이벤트를 알려주는 것 (ex 컴퓨터가 꺼졌으면 컴퓨터 동작이 안되기 떄문에 시그널을 통해 알려줘야함)
  • 시그널 처리: 시그널을 무시하거나 종료하거나 획득
  • Signal Handler: 시그널 처리를 위한 함수 지정

Signal 함수의 3가지 동작

  • 시그널을 무시
  • 시그널에 기본 동작
  • 시그널 수신 시 handler 호출

아래와 같은 방법으로 Strings 으로 분석할 수도 있음

 

아래의 창에서 의심스러워보이는 String을 찾음 (flag)

 

x 버튼을 통해서 의심스러운 라인이 어디에 있는 건지 filename을 확인할 수 있다.

OK 버튼 클릭

 

TAB 버튼을 누르면 아래와 같은 코드로 확인가능

 

추적결과 flag 는 1번 SET Signal 안에 있는 것으로 확인

flag 를 호출하려면 알람기능을 사용해야한다.

 

아래의 Signal 을 사용하면 Flag를 얻을 수 있다.

"SIGALRM | 14 | 종료 | 알림에 의해 발생"

명령어 "14" 를 삽입하면 30초 후에 알람이 나오면서 FLAG가 나온다.

 

 

 

두번째방법

 

VScode를 통해서 파이썬 파일을 열고 아래와 같이 주소값을 맞춰준다.

 

BINARY : file name

HOST 와 PORT: 파일의 주소값 (nc 3.34.49.33 1002)

 

 

 

위와 같이 주소와 포트값을 맞추고 python3 example_02.py 입력하여 실행

 

아래와 같이 main 함수 수정하여 결과값을 도출해낼 수 있다.

 


Pwntools

  • 익스플로잇 작성 라이브러리
  • CTF 익스플로잇을 최대한 쉽게 작성
  • 로컬 익스플로잇을 원격 익스플로잇으로 전환하기 용이

 

300x250

+ Recent posts