[IT@Security] Web 취약점 1. 버퍼 오버플로우
·
Hacking/Web Hacking
버퍼 오버플로우란? 버퍼 오버플로우 : 메모리에 할당된 버퍼의 양을 초과하는 데이터를 입력하여 프로그램의 복귀 주소(return address)를 조작하는 공격 버퍼(buffer) : 프로그램 처리 과정에 필요한 데이터가 일시적으로 저장되는 공간 메모리의 스택(stack) 영역과 힙(heap) 영역이 버퍼에 속하며 스택 오버플로우와 힙 오버플로우로 나누어진다. 하나의 프로그램은 수많은 서브 루틴들로 구성되는데 이런 서브 루틴이 프로그램에 의해 호출될 때, 함수 변수와 서브 루틴의 복귀 주소(return address) 포인터를 스택(stack)이라는 논리적 데이터 구조에 저장하게 된다. 스택은 실행중인 프로그램이 필요로 하는 정보를 저장하는 메모리 영역이다. 서브 루틴이 종료될 때 운영체제는 그것을 호출..
[IT@Security] 그누보드 5.0 리눅스 설치
·
Hacking/Web Hacking
그누보드를 리눅스에 설치하는 것이 파일 저장이든 테스트든 여러 모로 편할 것 같아서 로컬 환경에서 리눅스에 그누보드5 최초 정식 출시 버전을 다운로드 받았다. 잘못 건드리거나 악성코드 배포해도 스냅샷으로 돌릴 수 있으니까... 최초 정식 출시 버전을 다운받은 이유는 취약점이 많을 것 같아서 기본적으로 다음 글을 참고했다. https://ffoorreeuunn.tistory.com/289 [ Gnuboard ] Ubuntu 20.04 에서 그누보드 설치하기 (근데 망했어요) 우선 APM 부터 설치하도록 하겠습니다. 1. apache 설치하기 sudo apt install apache2 2. mysql 설치하기 sudo apt install mysql 3. php 설치하기 sudo apt install ph..
[파이썬 기초 암호 해킹] 서론
·
Hacking/Crypto
학습에 이용한 책은 '암호 해킹으로 배우는 파이썬의 기초' (알 스웨이가트 저, 신진철 역)이다. https://product.kyobobook.co.kr/detail/S000001804859 암호 해킹으로 배우는 파이썬의 기초 | 알 스웨이가트 - 교보문고 암호 해킹으로 배우는 파이썬의 기초 | 암호 해킹과 파이썬 코딩을 모두 맨땅에서 시작하는 책이다. 암호학도 파이썬도 모르는 사람뿐만 아니라, 프로그래밍 경험이 거의 없는 사람도 볼 수 있 product.kyobobook.co.kr 소스 코드 소스 코드는 https://nostarch.com/crackingcodes/ Cracking Codes with Python Cracking Codes with Python teaches you how to pr..
[Dreamhack] Cryptography STAGE 2 - 고전 암호와 현대 암호 : 현대 암호
·
Hacking/Crypto
서론 많은 고전 암호에서는 송신자와 수신자가 같은 키를 가지고 있어야 했다. 카이사르 암호에서는 두 사람이 알파벳을 미는 칸의 수를 공유하고 있어야 했고, 비제네르 암호에서는 키워드를 공유하고 있어야 했다. 이렇게 송신자와 수신자가 같은 키를 공유해야하는 암호 시스템을 대칭키 암호 시스템(Symmetric Key Cryptosystem)이라고 부른다. 같은 키를 갖고 있어야 하는 특성상, 대칭키 암호 시스템은 사전에 서로 키를 공유하는 과정이 반드시 필요하다. 그런데 현대에 많은 데이터가 오가는 네트워크는 도청에 매우 취약하므로 키를 평문으로 공유하기는 부적절하다. 그래서 학자들은 외부인이 키가 공유되는 과정을 도청해도, 공유되는 키는 알지 못하게 하는 키 공유 알고리즘(Key-Sharing Algori..
[Dreamhack] Cryptography STAGE 2 - 고전 암호와 현대 암호 : 고전 암호
·
Hacking/Crypto
서론 고전 암호는 컴퓨터와 같은 고성능 연산 장치가 발명되기 전에, 비교적 간단한 기계와 손 등으로 암복호화를 수행하던 암호를 말한다. 대부분 컴퓨터를 사용하면 쉽게 복호화되기 때문에 현대에는 사용되지 않는다. 고전 암호는 일반적으로 치환(Substitution)과 전치(Transposition)의 방법으로 설계된다. 치환은 평문의 문자를 다른 문자로 바꾸는 것을 말하며, 전치는 평문 문자들의 위치를 바꾸는 것을 말한다. 단순한 고전 암호는 한 가지 원리만을 사용하는 치환 암호(Substitution Cipher) 또는 전치 암호(Transposition Cipher)이고, 복잡한 고전 암호는 두 원리를 모두 사용한다. 치환 암호는 단일 문자 치환 암호(Monoalphabetic Substitution ..
[Dreamhack] Cryptography STAGE 1 - Cryptography Introduction : 소개
·
Hacking/Crypto
커리큘럼 소개 암호학 : 정보를 보호하기 위한 언어학적 및 수학적 방법론을 다루는 학문 현대에는 컴퓨터에 대한 의존도가 높아지면서 네트워크를 통해 민감한 정보가 빈번하게 오가게 되었고, 컴퓨터 환경에서 암호학은 매우 중요한 역할을 담당하게 되었다. 메신저를 개발할 때는 메세지를 도청 및 감청으로부터 보호해야하며, 사용자의 비밀번호를 보관할 때는 해킹으로부터 안전하도록 암호화해서 저장해야 한다. 커리큘럼 목표 : 기존에 암호학을 공부해본 적 없는 사람들에게 암호학을 넓고 얕게 알려드리는 것 실제 프로그램에 쓰이는 암호 알고리즘의 특징을 이해하고, 안전한 서비스를 개발하기 위해 어떤 암호 기술을 사용할 지 공부할 수 있다. 암호학 암호학(Cryptography) : 좁은 의미에서 제 삼자로부터 정보를 보호하..
[Dreamhack] System Hacking Advanced Stage 3 - Background: Master Canary
·
Hacking/System
Thread Local Storage Thread Local Storage (TLS) : 명칭 그대로 스레드의 저장 공간을 의미한다. ELF 바이너리를 살펴보면, 코드를 실행하기 위한 .text, 초기화되지 않은 전역 변수를 위한 .data 등의 섹션에서 데이터를 관리한다. 이와 달리 TLS 영역은 스레드의 전역 변수를 저장하기 위한 공간으로, 로더(Loader)에 의해서 할당된다. static void * init_tls (void) { /* Construct the static TLS block and the dtv for the initial thread. For some platforms this will include allocating memory for the thread descriptor..
[Dreamhack] System Hacking Advanced Stage 2 - seccomp
·
Hacking/System
문제 파일이다. // gcc -o seccomp seccomp.cq // 64-bit, canary, nx, partial relro #include #include #include #include #include #include #include #include #include #include #include #include int mode = SECCOMP_MODE_STRICT; void alarm_handler() { puts("TIME OUT"); exit(-1); } void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal(SIGALRM, alarm_handler); alarm(60); ..
[Dreamhack] System Hacking Advanced Stage 2 - Exploit Tech: Bypass SECCOMP
·
Hacking/System
Bypass SECCOMP SECCOMP는 시스템 콜 뿐만 아니라 전달되는 인자까지 추적하고 비교할 수 있다. 인자를 비교하는 것은 많은 예외 상황이 있을 수 있기 때문에 많은 개발자들은 시스템 콜을 호출하지 못하도록 설정한다. 해당 기술이 적용된 바이너리를 우회하는 방법은 상황에 따라 여러 가지이기 때문에 많은 분석과 공격 경험이 필요하다. 타 시스템 콜 호출 같은 기능을 하는 서로 다른 시스템 콜이 몇 가지 존재한다. 예를 들어, 파일을 열기 위해서 사용하는 시스템 콜은 대표적으로 open이 있는데, 같은 기능을 수행하는 openat이 있다. 만약 규칙이 open 시스템 콜을 호출하지 못하도록 정의되어 있다면 openat을 사용해 개발자가 의도하지 않은 행위를 할 수 있다. Application Bi..
[Dreamhack] System Hacking Advanced Stage 2 - Background: SECCOMP
·
Hacking/System
서론 원격 코드 실행 (Remote Code Execution) : 원격에서 곧바로 공격할 수 있는 취약점, 사전에 예방할 수 있는 방법이 없다. 이번 강의에서는 공격을 어렵게 하기 위한 보안 매커니즘인 샌드박스 (Sandbox)와 이에 속하는 기술인 SECCOMP를 알아보고, 해당 기술이 적용된 바이너리의 분석을 도와주는 도구인 seccomp-tools에 대해서 배울 수 있다. Sandbox 샌드박스 (Sandbox) ; 외부의 공격으로부터 시스템을 보호하기 위해 설계된 기법 Allow List와 Deny List 두 가지를 선택해 적용할 수 있으며, 애플리케이션의 기능을 수행하는데 있어서 꼭 필요한 시스템 콜 실행, 파일의 접근만을 허용한다. 보호된 영역에서 애플리케이션의 기능이 수행되기 때문에 외부..
[Dreamhack] System Hacking Stage 3 - Tool: gdb
·
Hacking/System
서론 버그(bug) : 실수로 발생한 프로그램의 결함 디버거(Debugger) : 버그를 없애기 위해 사용하는 도구 프로그램을 어셈블리 코드 단위로 실행하면서, 실행결과를 사용자에게 보여준다. 자신이 추상적으로 생각한 아이디어의 결과를 직관적으로 보여주기 때문에, 개발자는 디버거를 사용하여 자신이 작성한 코드의 문제점을 더욱 명확하게 찾을 수 있다. gdb gdb(GNU debugger) : 리눅스의 대표적인 디버거 오픈 소스로 개발되어 무료로 설치할 수 있으며 다양한 플러그인들이 개발되어 있다. Ubuntu 18.04에는 기본적으로 설치되어 있다. Github 링크 : https://github.com/scwuaptx/Pwngdb GitHub - scwuaptx/Pwngdb: gdb for pwn gd..
[Dreamhack] System Hacking Stage 2 - x86 Assembly 2
·
Hacking/System
Opcode: 스택 스택 : 함수별로 자신의 지역변수 또는 연산과정에서 부차적으로 생겨나는 임시 값들을 저장하는 영역 push val : val을 스택 최상단에 쌓음 rsp -= 8 [rsp] = val pop reg : 스택 최상단의 값을 꺼내서 reg에 대입 rsp += 8 reg = [rsp-8] Opcode: 프로시저 프로시저(Procedure) : 특정 기능을 수행하는 코드 조각 프로시저 사용 : 반복 연산 대체 → 전체 코드의 크기↓ , 기능별로 코드 조각에 이름 → 가독성 ↑ ​ 호출(Call) : 프로시저를 부르는 행위 반환(Return) : 프로시저에서 돌아오는 것 프로시저를 실행하고 나서 원래의 실행 흐름으로 돌아와야 하므로 call 다음의 명령어 주소(return address, 반환..