Mitigation: NX & ASLR # 들어가며 r2s를 통한 공격자의 침입을 더 어렵게 하려면 공격자가 메모리에서 임의 버퍼의 주소를 알기 어렵게 하고 메모리 영역에서 불필요한 실행 권한을 제거하는 보호 기법을 추가로 도입해야 함 # ASLR Address Space Layout Randomization(ASLR): 바이너리가 실행될 마다 스택, 힙, 공유 라이브러리 등을 임의의 주소에 할당하는 보호 기법 ASLR은 커널에서 지원하는 보호 기법이며, 다음의 명령어로 확인 가능 리눅스에서 이 값은 0, 1, 또는 2의 값을 가질 수 있음 각 ASLR이 적용되는 메모리 영역은 다음과 같음 No ASLR(0): ASLR을 적용하지 않음 Conservative Randomization(1): 스택, 힙, ..
Mitigation: Stack Canary # 들어가며 Return Address Overwrite: 스택의 반환 주소(Return Address)를 조작하여 실행 흐름을 획득하는 공격 기법 스택 카나리(Canary): 스택 버퍼 오버플로우로부터 반환 주소를 보호 함수의 프롤로그에서 스택 버퍼와 반환 주소 사이에 임의의 값을 삽입하고, 함수의 에필로그에서 해당 값의 변조를 확인하는 보호 기법 카나리 값의 변조가 확인되면 프로세스는 강제로 종료됨 스택 버퍼 오버플로우 반환 주소를 덮으려면 반드시 카나리를 먼저 덮어야 하므로 카나리 값을 모르는 공격자는 반환 주소를 덮을 때 카나리 값을 변조하게 됨 → 에필로그에서 변조가 확인되어 공격자는 실행흐름을 획득하지 못함 # 카나리의 작동 원리 1. 카나리 정적 ..
Memory Corruption: Stack Buffer Overflow # 서론 모리스 웜: 스택 버퍼 오버플로우 공격을 통해 전파됨 CVE details에 따르면 스택 버퍼 오버플로우를 포함한 오버플로우 취약점은 이제까지 18,081개가 발견되어 전체에서 3번째로 많이 발견되었으며, 2019년에도 1,247개가 추가로 발견됨 # 스택 버퍼 오버플로우 1. 버퍼 오버플로우 1.1 버퍼 버퍼(Buffer): 데이터가 목적지로 이동되기 전에 보관되는 임시 저장소 데이터가 처리속도가 다른 두 장치가 있을 때, 이 둘 사이에 오가는 데이터를 임시로 저장해두는 것은 일종의 완충 작용을 함 예를 들어 키보드에서 데이터가 입력되는 속도보다 데이터를 처리하는 속도가 느린 프로그램이 있음 이런 키보드를 사용하는데 별도..
Background: Calling Convention # 서론 1. 함수 호출 규약 함수 호출 규약: 함수의 호출 및 반환에 대한 약속 한 함수에서 다른 함수를 호출할 때, 프로그램 실행 흐름은 다른 함수로 이동함 호출한 함수가 반환하면, 다시 원래의 함수로 돌아와서 기존의 실행 흐름을 이어나감 함수를 호출할 때는 반환된 이후를 위해 호출자(Caller)의 상태(Stack Frame) 및 반환 주소(Return Address)를 지정해야 함 호출자는 피호출자(Callee)가 요구하는 인자를 전달해줘야 하며, 피호출자의 실행이 종료될 때는 반환 값을 전달받아야 함 2. 함수 호출 규약 종류 컴파일러는 지원하는 호출 규약 중, CPU 아키텍처에 적합한 것을 선택함 x86(32bit) 아키텍처는 레지스터를 ..
# Proxy - proxy를 통해 웹 서버에 접근 # yum -y install squid // proxy 설치 # systemctl restart mariadb // db 재시작 - proxy 설정 파일 수정 # cd /etc/squid # vi squid.conf // 웹 서버의 환경설정 파일 safe_ports만 허용하고 있음 다음과 같이 사용하는 ip를 추가하여 접근 제어 목록에 추가 변경 내용(centos7)의 접근 통제를 허용해 줌(적용하는 과정) - Client에서 web proxy를 찾아가도록 설정 firefox 설정에서 network proxy 찾기 수동으로 설정 port는 설정 파일에서 찾아보면 "http_port 3128"이라는 부분에서 알 수 있음 (아까 설정파일에서 localho..
Exploit Tech: Shellcode # 서론 1. 들어가며 🚪 - 익스플로잇(exploit): 해킹 분야에서 상대 시스템을 공격하는 것 - 익스플로잇은 '부당하게 이용하다'라는 뜻이 있는데, 상대 시스템에 침투하여 시스템을 악용하는 해킹과 맥락이 닿음 - 셸코드 셸코드 개념 orw 셸코드 작성 및 디버깅 execve 셸코드 작성 코스 요약 및 리뷰 퀴즈 2. 셸코드 🐚 - 셸코드(Shellcode): 익스플로잇을 위해 제작된 어셈블리 코드 조각을 의미 - 일반적으로 셸을 획득하기 위한 목적으로 셸코드를 사용해서, "셸"이 접두사로 붙었음 - 만약 해커가 rip(명령어 포인터 레지스터)를 자신이 작성한 셸코드로 옮길 수 있으면 해커는 원하는 어셈블리 코드를 실행시킬 수 있음 → 어셈블리어는 기계어와..
01. Metasploitable2 설치 Metasploitable - Browse /Metasploitable2 at SourceForge.net sourceforge.net - metasploitable2는 취약 서버(다양한 취약점을 가지고 있음)로 실습에서 사용하기 위해 설치 - login 정보 login: msfadmin password: msfadmin - root 사용자(관리자 mode) login: root password: msfadmin 02. Kali-Linux를 통한 Port Scanning 1) 분석 서버의 ip 주소 확인 metasploitable 2의 ip 주소는 192.168.56.133 임을 확인할 수 있음 CentOS7(Server)의 ip 주소는 192.168.56.131..
Tool: pwntools # 서론 1. pwntools의 등장 배경 - 파이썬으로 페이로드를 생성하고, 파이프(|)를 통해 이를 프로그램에 전달할 수 있음 - 그러나 익스플로잇이 조금만 복잡해져도 위와 같은 방식은 사용하기 어려워짐 - 그래서 해커들은 펄, 파이썬, C언어 등으로 익스플로잇 스크립트, 또는 바이너리를 제작하여 사용함 - 파이썬으로 여러 개의 익스플로잇 스크립트를 작성하다 보면 자주 사용하게 되는 함수들이 있는데, 이런 함수들을 반복적으로 구현하는 것은 비효율적임 - 그래서 시스템 해커들은 이들을 모아 pwntools라는 파이썬 모듈을 제작함 > 이제는 익스플로잇의 대부분이 pwntools를 이용하여 제작 및 공유됨 2. pwntools 설치 - pwntools는 깃헙에 오픈 소스로 공개..
Tool: gdb # 디버거란 🐛 - 프로그램을 개발할 때는 일반적으로 코드의 논리구조를 신중하게 설계하고, 코드를 작성해나감 - 개발 초기에 아무리 신중하게 설계해도, 코드의 규모가 커지다 보면 실수가 발생하기 마련 - 컴퓨터과학에서는 이렇게 실수로 발생한 프로그램의 결함을 버그(bug)라고 함 - 이미 완성된 코드에서 버그를 찾는 것은 어려움 따라서 어려움을 해소하고자 디버거(Debugger)라는 도구가 개발 됨 - 디버거는 문자 그대로 버그를 없애기 위해 사용하는 도구 - 프로그램을 어셈블리 코드 단위로 실행하면서, 실행결과를 사용자에게 보여줌 - 자신이 추상적으로 생각한 아이디어의 결과를 직관적으로 보여주기 때문에, 개발자는 디버거를 사용하여 자신이 작성한 코드의 문제점을 더욱 명확하게 찾을 수 ..
01. APM 설치 - 수업 시간에서 사용할 환경: CentOS7(Server, Client) 1) Apache(httpd) # yum -y install httpd* 2) PHP # yum -y install php # yum -y install php-mysql # yum -y install php* --skip-broken 3) Mariadb(MySQL) # yum -y install mariadb-server* 4) 실습을 위해 방화벽 중지 # systemctl stop firewalld 5) 웹서버 재시작하기 - 패키지와 데몬명이 다른 경우가 많음 + 프로토콜 같은 경우도 하지만 동일하게 일치되는 서비스들도 있음 # systemctl restart httpd 6) 데이터베이스 서버 재시작 # s..