pwnable 10

라자루스 루트킷 악성코드 분석 보고서(1/2)

#라자루스 #루트킷 #악성코드 #커널 본 게시글은 안랩 시큐리티대응센터(ASEC) 에서 2022. 09. 22. 자로 발간한 라자루스 공격 그룹의 BYOVD를 활용한 루트킷 악성코드 분석 보고서 의 내용에 대해 개인적으로 정리한 게시글입니다. 악성코드 관련 게시글들을 보다가 본의아니게 위에 기재한 악성코드 분석 보고서를 보게되어 공부 용도로 게시글을 작성해본다. 무엇보다 내 이목을 끌었던 것은 악성코드가 취약한 드라이버를 이용하여 커널단까지 조작하는 부분이었는데, 악성코드 분석 초보로써 굉장히 특이하다고 생각되었기에 세심하게 읽어보았다. 원본 보고서를 보면 거의 40장에 육박하는 매우 긴 분량이기 때문에 상세 내용을 나누어 서술해보겠다. 이번 게시글은 핵심 루트킷 파일이 작동하기 직전까지의 과정을 서술하..

[C++] 가상함수(Virtual Function)

#C++ #가상함수 C++ 에는 가상함수라는 개념이 있다. 같은 OOP 언어인 자바의 가상함수와 유사한데, 기본 클래스에서 가상 함수를 정의하여, 해당 기본 클래스를 상속 받는 파생 클래스가 해당 가상함수를 재정의하여 사용하도록 유도하여 Runtime 에 함수의 다형성을 높이기 위한 문법이라고 한다. 실행타임에 함수를 재정의해서 유용하게 사용할 수 있다는 것은 이해했는데, 의문점이 그냥 가상함수말고 일반적으로 함수 정의한 다음에 상속받은 클래스 단에서 오버라이드(재정의) 하여 사용하면 되지않나??? 라는 의문이었다. 정말 원론(?) 적인 이유는 다른 게시글 에 설명이 되어있었는데 엉뚱한 소멸자를 호출시키지않게 하기 위해서이다. C++ 개발 경험이 많이 없기 때문에 이러한 세세한 부분에 대해서는 생각해볼 ..

<C++ study> 2023.01.02

CVE ID 신청 방법

최근 CVE 신청할 일이 있었어서 정리해봄. 우선 CVE 를 등록해주는 기관선정을 해야하는데 본인이 찾은 취약점이 트리거 되는 프로그램의 벤더가 아래 링크에 있는 240개(2022.10.09 기준) 기관(통칭 CNA 라고 함) 중에 존재하면 해당 CNA 로 가서 먼저 제보하도록 권고 하고 있다. CNA Lists 링크 ex) visual studio code 에서 취약점을 찾았으면 CNA 역할을 하고있는 Microsoft Corperation 에 먼저 제보를 하면 빠르고 정확하게 CVE 를 발급받을 수 있다 일반적으로는 mitre corperation 에 제보하는 편이라고 한다. 기관선정을 했으면, 기관에 가서 신청을 해야하는데 필자같은 경우는 mitre 사이트에 가서 신청하였다. 신청 form 은 mi..

<사는이야기> 2022.10.09

[Pwnable.xyz] UAF

UAF #pwnable.xyz #not UAF #overwrite #heap 배점에 비해 쉬웠던 문제. 핵심만 언급하려한다. 결론적으로 본 문제는 UAF를 이용하지 않아도 된다. UAF로 풀이하는 루트도 있을런지는 모르겠지만 필자는 그냥 overwrite를 이용해서 문제를 풀었다. 바이너리의 기능은 총 5가지이다. 게임을 시작하거나, 저장하거나, 지우거나, 게임이름을 출력하거나, 게임 이름을 수정하거나... 여기서 게임은 단순히 두 숫자를 받아서 xor한 값을 특정 heap영역에 저장하는 행동을 한다. 이 문제의 목표는 win 함수를 실행 시키는 것 같다. 우선 IDA로 보면 바이너리 실행직후, initialize_game 함수를 통해 특정 heap영역과 data영역을 구성한다. 구조는 대략 이러하다. ..

[Pwnable.xyz] GrownUp

GrownUp #pwnable.xyz #baby_fsb 오랜만에 pwnable.xyz 를 하였다. 몸풀기로 낮은 점수의 GrownUp 문제를 풀어보았다. 플래그는 바이너리에 내장되어있다고 한다. 바이너리 문자열을 검색해보면 진짜로 플래그 (물론 페이크 플래그)가 내장되어있다. 0x601080 이 주소를 기억하라. PIE가 적용되어있지 않아서 이 data영역의 주소는 서버에서도 동일하게 매핑되어있을 것이다. 바이너리 실행결과는 이렇다. 봐야할 주요부분은 main함수이다. 처음에는 setup 함수가 실행된다. setup 함수는 ... data영역의 0x601160 부분에 %s\n 문자열을 넣는다. 후에 0x601160은 main함수의 printf의 서식문자로 이용된다. 그리고 y or N에 대한 응답을 re..

[System32.kr] Warm Up

Warm Up #pwnable #system32.kr #file descriptor 새로운 워게임 사이트를 찾았다! 암호학 위주여서 매우 관심이 간다 ㅎㅎ 첫 단추를 어떤 문제로 풀어볼까 하다가 Warm Up 이라는 pwnable 문제를 찾았다. 파일 디스크립터를 이용하는 문제 같다. 처음에는 파일 디스크립터를 overwrite 하는 종류의 문제인가 했으나 의외로 간단했다. 다만 strip 이 적용된 상태라 glibc 함수들을 일일히 인지하고 복구하는 과정에 약간의 난항이 있다. 우선 위처럼 메뉴가 주어지고 특정 파일을 open하고 읽거나 삭제할 수 있다. 디컴파일 해보니 31337 이라는 숨겨진 커맨드가 있었다. 이 함수는 /home/strange_file/flag 파일내용을 임의의 string 테이블..

반응형