Try Attack91 악성코드와 리버싱 1. 컴파일 시 주소변경 - 컴파일시 이미지베이스가 변경되도록 하는 방어기법이 있다. 2. 컴파일러 - 어셈블리어로 코딩할 경우에는 스택에 하나씩 push, pop 한다. - 그러나 실행파일을 디스어셈블 해보면 스택포인터를 한 번에 잡아놓고 빈 공간에 하나씩 넣는다. - 즉, 변수를 하나씩 push하지 않는다. 3. Calling convention(콜링컨벤션) - 함수호출규약이라고 부른다. - 인자넘기는 방법을 말한다. - 넘기는 순서는 오른쪽에서 왼쪽순서이다. 4. 악성코드와 리버싱 - 악성코드는 로직을 분석하고 리버싱은 흐름을 분석한다. - 흐름을 분석하지 못하도록 하는 것을 안티리버싱이라 한다. 1) 안티리버싱 [1] 이미지, 베이스주소가 변경되도록 한다. [2] 해커가 실행파일을 변조하기 때문에.. 2018. 10. 9. 전략 1. 휴리스틱 - 과학적이지는 않지만 경험에 근거한 패턴, 정형화 되기는 어렵지만 AI에서 주로 사용한다. 2. 순서 - UI가 있는 프로그램은 순서대로 흐르지 않는다. 3. 인스트럭션 - 어셈블러는 인스트럭션으로 분해되기 때문에 C언어 코드의 5배 이상 나온다. 4. 길이 - 코드의 길이가 길어서 순차적으로 진행이 불가능하다. 1) 휴리스틱이용 [1] 프로그램에서 출력되는 문자열 검색을 통해 핵심 코드부분을 접근하는 공략이다. - data 영역에 출력될 값이 있을 것이고, - code 영역에 명령어가 들어있을 것이고, - 즉, code영역에 적혀있는 출력하려는 주소를 따라가면 data영역의 출력될 값이 있을 것이다. 2) 특정 API가 호출된 부분을 찾아가는 방법이다. [1] API 확인 - 예를 들어.. 2018. 9. 16. 올리디버거 1. 단축키 1) F7 = Step Into 2) F8 = Step Over 3) F2 = Break Point 4) F9 = Break Point로 이동 5) Ctrl + F2 = 초기화 후 다시보기(처음 로더한 상태) 6) - = 이전 확인 7) + = 이후 확인 2. 디스플레이 1) Code 화면 [1] 디스어셈블 된 코드를 보여주고 주석과 라벨을 확인할 수 있다. - 반복문과 점프문 위치를 확인이 가능하다. 2) Register 화면 [1] 레지스터 값을 실시간으로 보여주고 값을 수정할 수 있다. 3) Memory Dump 화면 [1] 원하는 메모리 주소의 위치를 16진수 및 ASCII/Unicode로 확인이 가능하며 수정할 수 있다. 4) Stack 화면 [1] 스택메모리를 실시간으로 확인하고 .. 2018. 9. 16. 리버싱에 필요한 도구 1. PEView1) PE구조를 확인할 수 있다. 2. Detect It Easy1) 실행파일의 정보를 확인할 수 있도록 도와준다.2) 기준주소 및 시작주소, 제작언어 및 링커, import내용 등을 확인할 수 있다. 3. OllyDumpEx1) OllyDbg에서 메모리 덤프를 가능하게 해주는 Plug-in이다. 4. Lord PE1) 손상된 IAT를 복구해주는 도구이다. [1] 손상된 IAT을 복구하려면 PE헤더 정보를 분석해서 사용하는 DLL과 함수정보를 일일이 맞춰야한다. 2018. 9. 9. 역공학 기초 1. cpu의 호환성 1) cpu(intel, 모바일)가 다르면 같은 mov ax, 10이라도 다르게 실행된다. - cpu가 해석하는 방법이 다르다. 2. os의 호환성 1) 자원관리를 쉽게하기 위해 os마다 같은 명령어지만 다른 운영하는 방식을 가지고 있다. 2) 규격(format) - 컴파일러로 만든다. - PE = Windows - ELF = Linux - OSX = Mach-O - APK = Android 3) 그래서 같은 프로그램이지만 설치하는 파일이 Windows용, Linux용, Android용, IOS용 등으로 나뉜다. 4) Loader - 메모리에 올리는 것[ex, 더블클릭 시 실행, 메모리의 주소가 재배치(relocation)] - Hz는 1초에 전기신호가 전달된 횟수를 의미[요즘 CP.. 2018. 8. 25. File Upload 1. File Upload - 악성스크립트 (Web shell 등의 백도어) File을 Web Server에 침투시키는 보안취약점을 말한다. + Web Shell은 Web상에서 System에서 할 수 있는 모든 것을 할 수 있다. 1) Bind Shell Vs Reverse Shell [1] Bind Shell - 공격 대상이 자신의 호스트에 listener port를 열고 들어오는 요청을 대기하게 만드는 shell을 말한다. - 공격자는 사설 ip를 사용해도 무관하며, 서버는 공인ip를 사용하여야 한다. - Web Server에 netcat을 띄운다. + nc [Server IP] [port number] [2] Reverse Shell - 공격 대상이 공격자에게 통신하도록 만드는 shell을 말한다... 2018. 8. 12. File Inclusion 1. File Inclusion - Web Server의 resource를 권한 없이 가져오는 것을 말한다. - Open source로 개발 된 Application은 디렉토리 구조가 알려져 있어서 $_GET, $_POST, $_Cookie 값을 전달 받을 때 매개변수의 값을 서버에서 검증하지 않아 취약점이 있다. - 공격자가 대상 서버의 URL을 통해 공격코드를 삽입하여 공격을 시도한다. 1) 공격방법 - 서버의 URL을 통해 공격 코드를 삽입하여 공격한다. - http://192.168.111.104/?page=/etc/passwd 와 같이 출력할 것을 작성한다. 2) RFI Attack(Remote File Include) - 악성 스크립트를 서버에 전달하여 실행하는 방법이다. - 원격지의 파일을 .. 2018. 8. 12. 프로토콜 분석 1. 웹 프로토콜 분석 [1] 웹 구조 [2] http 1.0 / http 1.1 동작원리 [3] http 프로토콜 [요청] [4] http 프로토콜 [응답] [5] http 프로토콜[구성] [6] http 프로토콜[요청라인] [7] http 프로토콜[상태라인] [8] http 프로토콜[상태코드] [9] http 프로토콜[헤더] [10] http 프로토콜[메소드] [11] http 프로토콜[방식] [12] http 프로토콜[동작과정] 2018. 8. 12. Command Injection 1. Command Injection - 원격 명령어 실행 취약점 - 공격 시 공격자는 자신이 실행하고자 하는 명령어를 서버에 원격으로 실행 가능 1) 환경 - Unix or Linux 운영체제를 사용하여 명령어를 실행할 수 있도록 만들어 놓은 사이트 및 Application [ex) ping test] - kali linux 2018.1 운영체제의 공격자 클라이언트 - 공격자 클라이언트에 설치된 Burp Suite[proxy server기능, 값 변조를 위해] 프로그램을 사용 - 서버와 클라이언트 간의 오고가는 패킷을 확인하기 위해 firefox 프록시기능 on 2) 선행지식 - 명령어 ; 앞 명령어 실행 후 뒤 명령어 실행 && 앞 명령어가 참이면 뒤 명령어 실행 || 앞 명령어가 거짓이면 뒤 명령어.. 2018. 8. 12. brute force 1. Brute Force Attack - 무차별 대입공격 - 공격자가 계정의 암호 값에 입력할 수 있는 모든 값을 대입하여 암호를 해독하는 공격 1) 환경 - ubuntu 16.04 desktop 운영체제의 php로 만들어진 웹서버 - kali linux 2018.1 운영체제의 공격자 클라이언트 - 공격자 클라이언트에 설치된 Burp Suite[proxy server기능, 값 변조를 위해] 프로그램을 사용 - 서버와 클라이언트 간의 오고가는 패킷을 확인하기 위해 firefox 프록시기능 on 2) 시연 [1] 클라이언트에서 웹 서버 접속 후 프록시 잡아서 내용 확인 [2] 우클릭 후 send to Intruder 를 클릭하여 공격할 서버 확인 [3] 공격타입에서 원하는 것을 선택 후 입력정보에 해당하는.. 2018. 8. 11. Overflow - 2 BOF.c 소스파일 #include #include #include void goal() { puts("\n==================================="); puts(" you got the shell! \n==================================="); setreuid(0,0); system("/bin/sh"); } void bp1() { char buf1[20]; fgets(buf1, 40, stdin); } void bp2() { char buf2[30]; fgets(buf2, 60, stdin); } void bp3() { char buf3[40]; fgets(buf3, 80, stdin); } int main() { int choice; printf("1.. 2018. 5. 24. Overflow - 1 vulnerable.c 위 코드는 strcpy()함수로 argv[1]을 str로 복사 후 printf()함수로 str을 출력 그러나 위 코드에는 strcpy()함수와 printf()함수의 취약점이 존재. strcpy()는 argv[1]의 문자열의 길이를 검증하지 않아 Buffer Overflow 취약점이 발생 printf()는 포멧 타입과 인자를 지정하지 않고 변수를 직접 인자로 넣어서 Format String Bug 취약점이 발생 시나리오1. Buffer Overflow - str 사이즈가 256byte이고 strcpy()는 문자열의 길이를 검증하지 않으므로 argv[1]에 shell 코드를 넣고 str로 복사하여 str을 Overflow시키고 main()함수의 return address를 str주소로.. 2018. 5. 20. 이전 1 ··· 4 5 6 7 8 다음