서론 kernel에서 프로세스가 실행된다고 생각하면 컴퓨터를 공부하면 한번 쯤은 보게 되는 운영체제 구조 그림과 매칭이 되지 않는데 뭔가 이상하다는 것을 확인할 수 있다. 그래서 보통 Local PC에서 kernel exploit을 하게 되면 특정 프로세스를 실행시킨 후에 token stealing과 같은 방법으로 해당 프로세스에 권한을 부여해주는 shellcode를 사용한다. 그럼 Remote PC에서의 shellcode는 어떻게 될까? 특정 프로세스를 실행하는 것부터 막막해진다. 그래서 궁금증을 풀기 위해 유명한 Remote kernel exploit인 EternalBlue 취약점에서 사용되었던 kernel shellcode를 분석하고자 한다. 요약 해당 shellcode는 코드 전체가 한 번에 다 ..
원본 : https://www.gatewatcher.com/en/news/blog/windows-kernel-pool-spraying - 여기에서 설명한 내용은 Windows 8 이후부터 단순 pool spray 방법만 사용 가능하다. - Introduction의 논문 link [1][2]와 결론의 [5]는 원본 link에 있음 -------------------------------------------------------------------------------------------------- 1) Introduction kernel의 pool 할당자는 여러 chunk들에 대해서 각각의 chunk 헤더를 하나하나 체크하기 때문에 kernel의 pool에서 발생하는 취약점을 익스플로잇할 때 BSO..
여러 네트워크 프로토콜들을 분석해보면 ASN.1 format을 사용하는 것을 자주 볼 수 있다. 와이어샤크에서는 ASN.1에 대해서 알아서 파싱해서 처리해 버려서 이런 부분은 프로토콜 분석 내용이 표시하지 않고, 헥스 창 아래에 별도로 표시하고 있다. ASN.1에 대해 요약 내용은 https://nacamp.tistory.com/17 를 참고하면 될 것 같다. ASN.1 format 자체는 어떤 데이터를 어떤 크기만큼 보내는지 명시하는 추상적인 형태의 표준이기 때문에 이를 실제로 네트워크로 보내기 위해 변환시키는 형식은 따로 있다. BER : Basic Encoding Rules CER : Canonical Encoding Rules DER : Distinguished Encoding Rules XER ..
방법 Windows의 업데이트 파일인 .msu를 받는다. .msu 파일을 추출해서 업데이트 패키지를 얻는다. 업데이트 패키지에서 .msu 파일의 이름 앞부분과 동일한 이름의 .cab 파일을 확인한다. .cab 파일을 추출해서 실제 Windows에 업데이트되는 파일들을 얻는다. .msu 파일을 받는 방법(보안 업데이트 파일만) : https://portal.msrc.microsoft.com/en-us/security-guidance 해당 링크에서 받고자 하는 업데이트 버전에 맞춰 Windows 플랫폼과 Article, Details를 확인해서 받으면 된다. 찾았다면 Download의 링크를 클릭해 해당 업데이트의 Microsoft Update Catalog로 이동한 다음, Title에 나오는 플랫폼 등을 ..
host pc : iMac pro debugger vm : Windows 10 debuggee vm : Windows 7 사전 준비 - Windows OS 2개 - VMware Fusion 3.0 이상 - windbg (debugger vm) 개요 - Mac OS에서 VMware Fusion으로 Windows 2개를 켠 후, 하나의 Windows가 반대쪽 Windows 커널 디버깅을 가능하도록 한다. VMware Fusion 수동 시리얼 포트 설정 시작 전 - VMware의 VM 구성 파일은 .vmx 파일이다. 이 녀석의 Serial port 부분을 수정하면 되는데 Mac은 약간 번거롭다. - Mac OS에서 VMware Fusion을 사용하면 기본적으로 ~/Library/Application Suppo..
libcurl 다운로드 방법(Windows) : vcpkg 사용 API 목록 curl_global_init libcurl 라이브러리 내부 환경 초기화 반환값 : CURLcode 타입의 오류 값 1번째 인자 : flags("CURL_GLOBAL_"으로 시작) curl_global_cleanup curl_global_init으로 생성된 자원 해제 curl_free : curl 내부에서 할당한 메모리를 해제 Easy Interface curl_easy_init CURL 핸들 생성 반환 값 : CURL 핸들 curl_easy_cleanup CURL 핸들 정리 1번째 인자 : CURL 핸들 curl_easy_setopt CURLcode 타입의 오류 값 1번째 인자 : CURL 핸들 2번째 인자 : 설정한 옵션의 ..
Job 객체 프로세스들의 그룹을 1개의 단위로 관리하도록 허용해주는 객체이다. Job 객체와 연관된 프로세스들은 Job 객체를 제어할 때 함께 제어되는데, 여기서 하나의 작업을 위해 여러 프로세스들이 동작하는 경우 이를 Job 객체로 묶어 쉽게 제어 가능하다는 이점이 있다. 스레드가 실행 흐름 단위, 프로세스가 실행되는 자원 단위였다면 Job은 작업의 단위라고 생각하면 된다. 주요 기능프로세스 및 Job의 자원 사용과 같은 기본 제한 (JOBOBJECT_BASIC_LIMIT_INFORMATION)사용자 인터페이스 사용 제한 (JOBOBJECT_BASIC_UI_RESTRICTIONS)cpu 사용 제한 (JOBOBJECT_CPU_RATE_CONTROL_INFORMATION)JOBOBJECT_BASIC_LIM..
struct의 경우. 접근지정자가 기본적으로 public이기 때문에 선언 및 초기화가 어렵지 않다. 먼저 struct로 아래처럼 구조체를 만든 후, 선언과 초기화를 하면 2가지를 볼 수 있다.12345678#pragma comment(lib, "ws2_32.lib")#include #include struct param { SOCKET m_sock; BOOL m_bClose;};Colored by Color Scriptercs 첫 번째 방법은 가장 흔하게 사용되는 방법으로 먼저 선언을 하고 내부 멤버를 직접 하나하나 초기화하는 방법이다. 12345678910int main( __in int argc, __in char* argv[]){ struct param p; p.m_sock = NULL; p.m_b..
보호되어 있는 글입니다.
보호되어 있는 글입니다.