전체 글 235

[악성코드 개발](8)[페이로드 난독화]

payload obfuscation페이로드를 그냥 raw로 저장하면 분명 백신에 걸릴 것이다...이때 사용하는 것이 바로 페이로드 난독화다!저장은 난독화를 하고 메모리에 virtualAlloc등으로 메모리에 올리기 직전에 난독화를 해제해 페이로드를 돌린다!release 모드로 컴파일하기!IPv4 / IPv6 난독화셸코드의 바이트를 IPv4 / IPv6 문자열로 바꾸는 방법IPv4 난독화: 각 바이트를 10진수로 바꿔 4바이트씩 인코딩하기(따라서 패딩으로 4바이트의 배수가 되게 페이로드를 조정)예) FC 48 83 E4 를 IPv4 인코딩 252.72.131.228IPv4 난독화 해제:NTAPI의 Rtllpv4StringToAddressA를 통해 IPv4 -> byte으로 바꿀 수 있다https://..

[악성코드 개발](7)[metasploit]

metasploitmetasploit 모듈 모음https://docs.metasploit.com/docs/modules.html나는 WSL에 환경을 구축했다! 이 사이트를 참고하면 도움이 된다https://tryhackme.com/module/metasploit기본 명령어msfconsole로 msf내부 콘솔로 들어가 명령어를 치면 된다컨텍스트 변경use exploit/windows/smb/ms17_010_eternalblue익스플로잇인데 / windows이 타겟이고 / 파일,프린터 공유기 공격을 하는 / ms17_010_eternalblue 공격을 / 사용하겠다info: 해당 익스의 정보를 출력함물론 컨텍스트 밖에서info auxiliary/scanner/ssh/ssh_login처럼 물어봐도 괜찮다sho..

[악성코드 개발](6)[페이로드 저장]

페이로드 저장하기악성코드가 악성 행위를 하기 위해선, 명령 코드인 페이로드가 필요하다이 페이로드를 어디에 저장할 수 있는지 봐보자. .data에 저장하기.data: 초기화된 전역변수, 정적 변수를 저장하는 공간 .data는 read, write가 가능하므로, 암호화된 페이로드를 작성하기에 적합하다! 단, excute 권한은 없어서 여기서 바로 코드를 실행하면 DEP에 의해 죽는다... 페이로드를 전역/지역 변수로 둘 경우 저장할 수 있다!#include #include // msfvenom calc shellcode // msfvenom -p windows/x64/exec CMD=calc.exe -f c // .data saved payload unsigned char Data_RawD..

[백신 개발](4)[바이러스 db]

바이러스 db 구축아무래도 새로운 악성코드가 나타날 때 마다 vaccine.py를 수정하는 건 무리다.따라서 vaccine파일과 db를 분리하는 것이 좋을 것이다. csv 파일과 pandas dataframe을 가지고 db를 구축했다.csv를 읽는건 pandas.read_csv()로 처리하면 된다.import sysimport hashlibimport osimport pandas as pd# EICAR_new.txt 파일 읽기fp = open('test.txt', 'rb')fbuf = fp.read()fp.close()malware_db = pd.read_csv("malware.csv")# MD5 해시를 이용한 진단input_hash = hashlib.md5(fbuf).hexdigest()if input..

[백신 개발](3)[EICAR 변종 탐지]

변종 탐지EICAR 파일의 변종을 탐지해보자! EICAR_new.txtX5O!P%@AP[4\PZX54(P^)7CC)7}$HWANGALLBAM!!!!$H+H*이번엔 안에 들어있는 문자열이 달라진 EICAR의 변종이다 기존의 EICAR 해시로 탐지하는 백신을 돌려보면,정상이라고 뜬다...이걸 해결하는 방법은 이 해시 또한 백신이 악성코드라 인식할 수 있게 알려주는 것이다. md5 = e0d01e4135f4839f4a3c58a33ff7cf96 이떄 이 시그니처들을 효율적으로 관리하기 위해 python의 list, dictionary와 같이 여러 데이터를 다룰 수 있는 자료구조를 채택한다.나는 dictionary로 짜봤다.import sysimport hashlibimport os# EICAR_new.tx..

[백신 개발](2)[EICAR test file]

EICAR test file 백신 만들기EICAR test file?https://www.eicar.org/download-anti-malware-testfile/백신 테스트용 "가짜" 바이러스이다. 악성 행위는 하지 않고 그냥 악성 windows 보호를 잠깐 꺼놓고메모장에X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*이 문자열을 복붙하고확장자를 .com으로 하면 된다. 그러나 EICAR 파일은 16비트 DOS 프로그램으로 64비트 환경에서는 추가로 환경을 세팅해줘야 함 -> 백신이 탐지하기에 .txt만 써도 되니 따로 환경은 설정 안함. 기본 이론정탐 & 오탐 & 미탐정탐: 정상을 정상으로, 악성을 악성으로 탐지..

[악성코드 개발](5)[Windows process & thread]

windows process윈도우에서 실행되는 프로그램 또는 응용 프로그램-> 프로세스 간 기본적으로는 자원 격리 각각의 프로세스에는 ID가 있고 (PID)프로세스 내에서 스레드는 유일한 ID를 갖는다 (TID) 프로세스 메모리페이지 단위로 운영체제가 할당private memory: 다른 프로세스와 공유 못함mapped memory: 프로세스간 공유 가능다른 프로세스에 의해 변경되지 않음 (read only)image memory: 실행파일의 코드, 데이터 포함주로 dll파일과 관련 프로세스 환경 블록 (PEB)사용중인 프로세스에 대한 정보를 담은 구조체-> 운영체제가 실행중인 프로세스 정보를 저장할 때 사용-> user 메모리 영역에 저장됨 핵심 필드BeingDebugged: 이 프로세스가 디버깅 당하..

[악성코드 개발](4)[DLL]

DLL여러 응용 프로그램에서 동시에 사용할 수 있는 실행가능한 함수 or 데이터의 공유 라이브러리-> exe와 달리 자체적으로 코드를 실행할 수는 없다장점코드 모듈화코드 재사용효율적인 메모리 사용핵심 dll들은 거의 모든 윈도우 프로세스에서 사용된다.-> 따라서 한 물리공간에 매핑하고 가상주소에서 여기를 가리키도록 한다-> 즉, 하나의 프로세스에서 dll의 특정 함수 주소를 알아내면 모든 프로세스에서도 그 주소는 동일하다예) kernel32.dll, ntdll.dll, user32.dll 등 DLL 만들기 & 실행visual studio에서 cpp파일 만드는 것처럼 새 프로젝트에서 dll을 선택하면 템플릿이 생성된다.DLL 진입점DLL_PROCESS_ATTACH: 프로세스가 DLL을 로드DLL_THREA..

[악성코드 개발](3)[Windows API]

윈도우 API앞에 P가 붙으면 그 형식의 포인터를 나타낸다뒤에 A가 붙으면 ANSI 형식이다뒤에 W가 붙으면 UNICODE 또는 Wide를 뜻한다.__IN__, __OUT__ 키워드는 주석용이다. 데이터 형식DWORD: 0 ~ $2^{32}-1$까지 나타내는 32비트 값SIZE_T: 객체의 크기를 나타내는데 사용되는 값32비트: unsigned int64비트: signed intVOID: 데이터 형식이 없음PVOID: 포인터 (= void*)32비트: 4바이트 포인터64비트: 8바이트 포인터HANDLE: 운영체제가 관리하는 개체를 지정하는 값파일, 프로세스, 스레드 등...HMODULE: 모듈에 대한 핸들exe, dll 등...LPCSTR / PCSTR (= const char*)ANSI문자로 이루어진 ..

[악성코드 개발](2)[Windows 아키텍쳐]

윈도우 아키텍쳐사용자 프로세스: 사용자가 실행하는 응용 프로그램subsystem DLL: 사용자 프로세스에서 호출되는 API를 포함한 DLL예) CreateFile()은 kernel32.dll에 포함되어있음NTDLL: 시스템 전체 DLLuser-kernel 전환을 생성하는 특수 DLL네이티브 API or NTAPI라고도 함kernel: 드라이버 및 모듈을 호출해 작업을 완료함부분적으로 C:/Windows/System32/ntoskrnl.exe에 일부 저장되기도 함함수 호출 흐름예) CreateFile을 호출한다면...사용자 프로세스에서 CreateFile호출subsystem DLL (kernel32.dll)에서 CreateFile API 호출NTDLL을 통해 NtCreateFile 호출 이후 ..

[백신 개발](1)[악성코드 & 백신이란?]

악성코드란 무엇인가?악성코드: 컴퓨터에 악영향을 미칠 수 있는 모든 소프트웨어의 총칭형태에 따른 분류바이러스정상 파일, 부트섹터 감염 악성코드다른 정상 파일에 빌붙음웜네트워크로 확산되는 악성코드트로이 목마특정 조건이 성립될 때 동작하는 악성코드보통 정보 유출을 위해 제작됨백도어해커들이 접근하기 쉽게 뒷문을 만드는 악성코드스파이웨어정식 소프트웨어 내에 광고같은거 넣어놓음즉 정상 소프트웨어 내에 광고 띄우는 프로그램이 내장애드웨어광고 노출을 목적으로 하는 악성코드 악성코드 분석나는 https://bazaar.abuse.ch/ 여기서 악성 파일을 다운받는다.정적 분석악성 파일을 실행하지 않고 뜯어보며 분석도구: 보통 리버싱 도구를 많이 활용함HxDdetect it easypestudio동적 분석악성 파일을 직..

[악성코드 개발](1)[환경 구축]

악성코드 개발 주기(MDLC)(정식 명칭은 아니고 SDLC 패러디다.)개발 - 테스트 - 오프라인 테스트 - 온라인 테스트 - IoC 분석개발악성 소프트웨어의 기능 개발 또는 개선을 시작테스트지금까지 개발된 코드에 숨겨진 버그를 찾아내기 위해 테스트를 수행오프라인 AV/EDR 테스트개발된 악성코드를 가능한 한 많은 보안 제품에 대해 테스트 샘플이 외부로 전송되지 않도록 오프라인으로 테스트를 진행하는 것이 중요함이떄, 클라우드 기반 보호 옵션을 비활성화해야 함온라인 AV/EDR 테스트인터넷에 연결된 보안 제품을 대상으로 개발된 악성코드를 테스트클라우드 엔진은 AV/EDR의 핵심 구성 요소인 경우가 많으므로, 이러한 구성 요소를 대상으로 악성코드를 테스트하는 것은 더욱 정확한 결과를 얻는 데 중요함! 이 단..

[계산이론](28)[NP-Complete]

NP-completeNP이고 (모든 NP문제) $\le_p$ NPc 인 NPc만약 NPc 중 하나만 poly 알고리즘이 나오면,모든 NP문제는 poly 알고리즘이 있다는 것이 증명된다.$\le_p$ : 다항시간 환원 가능다항시간 함수 $\exists f: \ \sum^* \rightarrow \sum^*$일때,w, $w \in A \Leftrightarrow f(w) \in B$이면 $A \le_p B$라고 한다.-> w가 accept면 reduce된 w가 accept만약 A가 B로 다항시간 환원 가능이고 B가 P에 속하면 A도 P $A\le_pB \ & \ B\in P \Rightarrow A \in P$ 만약 B가 NPc이고 B가 NP인 C로 다항시간 환원 가능이면 C도 NPc이다 B is..

CS/계산이론 2026.01.12

[계산이론](27)[P & NP]

class PSDTM이 다항시간(polynominal time) 안에 문제를 풀 수 있음 $P = \bigcup_{k}TIME(n^k)$ 즉, 시간 복잡도가 O(n), O(n^2), O(n^30), .... 이떄 practicaly solvable하다 한다 PATH problems -> t인 경로가 존재하는가?PATH는 다항시간 내에 풀 수 있는 알고리즘이 있다. $PATH \in P$ 노드가 v개 있을 때, 단순하게 브루트 포스로 풀면... O($v^v$)의 시간복잡도를 갖게 된다. 그러나, BFS로 풀면... 1. s에 .을 찍는다 2. s와 연결된 노드 중 .이 안찍혀 있는 노드는 .을 찍는다 3. 만약 t가 .이 찍혔다면 accept O(V+E) -..

CS/계산이론 2026.01.09

[계산이론](26)[time complexity]

time complexity풀 수 있는가? (decidable / undecidable)-> 그럼 '실제로' 풀 수 있는가? (P / NP) 단순히 풀 수 있다 없다를 넘어현실적으로 시간, 자원 등을 소모하여 풀 수 있겠는가?time complexity theory시간 복잡도를 측정하는 방법BIG-O 표기법(자료구조 1 참고...)-> 이때 기준을 single deterministic TM으로 삼는다 polynominaly diff VS exponetialy diff만약 다항식 형태면 polynominal하게 다르다고 하고equivalent하다고 한다. Single-tape TM VS Multi-tape TMSTM의 시간 복잡도가 O(t(n))이라 해보자.이떄 MTM은 과연 얼마나 걸릴까? MTM -> ..

CS/계산이론 2026.01.08
728x90
반응형