Hacking
-
Master Canary 스택 버퍼를 사용하는 모든 함수에서 같은 카나리 값을 사용한다. 이러한 특징 때문에 임의 함수에서 메모리 릭으로 카나리를 알아낼 수 있다면 다른 함수에서 발생하는 스택 버퍼 오버플로우에서 카나리를 덮어쓰고 실행 흐름을 조작할 수 있다. SSP 동작원리를 살펴보면 버퍼를 사용하는 함수의 프롤로그에서 fs:0x28에 위치하는 값을 가져와서 rbp바로 앞에 삽입한다. static void security_init (void) { /* Set up the stack checker's canary. */ uintptr_t stack_chk_guard = _dl_setup_stack_chk_guard (_dl_random); #ifdef THREAD_SET_STACK_GUARD THREAD..
Master CanaryMaster Canary 스택 버퍼를 사용하는 모든 함수에서 같은 카나리 값을 사용한다. 이러한 특징 때문에 임의 함수에서 메모리 릭으로 카나리를 알아낼 수 있다면 다른 함수에서 발생하는 스택 버퍼 오버플로우에서 카나리를 덮어쓰고 실행 흐름을 조작할 수 있다. SSP 동작원리를 살펴보면 버퍼를 사용하는 함수의 프롤로그에서 fs:0x28에 위치하는 값을 가져와서 rbp바로 앞에 삽입한다. static void security_init (void) { /* Set up the stack checker's canary. */ uintptr_t stack_chk_guard = _dl_setup_stack_chk_guard (_dl_random); #ifdef THREAD_SET_STACK_GUARD THREAD..
2023.08.22 -
함수 호출 규약 함수 호출 규약은 함수 호출 시 일어나는 행동에 대한 약속이다. 한 함수에서 다른 함수로 호출할 때, 프로그램의 실행 흐름은 다른 함수로 이동한다. 그리고 호출한 함수가 반환하면, 다시 원래의 함수로 돌아와서 기존의 실행 흐름을 이어나간다. 그러므로 함수를 호출할 때는 반환된 이후를 위해 호출자(Caller)의 상태(Stack frame) 및 반환 주소(Return address)를 지정해줘야 한다. 또한 호출자는 피호출자(Callee)가 요구하는 인자를 전달해 줘야 며, 피호출자의 실행이 종료될 때는 반환 값을 전달받아야 한다. 함수 호출 규약은 여러 가지 있는데 프로그래머가 코드에 명시하지 않는다면 컴파일러는 지원하는 호출 규약 중에서 CPU 아키텍처에 적합한 것을 선택한다. 함수 호..
Calling Convention함수 호출 규약 함수 호출 규약은 함수 호출 시 일어나는 행동에 대한 약속이다. 한 함수에서 다른 함수로 호출할 때, 프로그램의 실행 흐름은 다른 함수로 이동한다. 그리고 호출한 함수가 반환하면, 다시 원래의 함수로 돌아와서 기존의 실행 흐름을 이어나간다. 그러므로 함수를 호출할 때는 반환된 이후를 위해 호출자(Caller)의 상태(Stack frame) 및 반환 주소(Return address)를 지정해줘야 한다. 또한 호출자는 피호출자(Callee)가 요구하는 인자를 전달해 줘야 며, 피호출자의 실행이 종료될 때는 반환 값을 전달받아야 한다. 함수 호출 규약은 여러 가지 있는데 프로그래머가 코드에 명시하지 않는다면 컴파일러는 지원하는 호출 규약 중에서 CPU 아키텍처에 적합한 것을 선택한다. 함수 호..
2023.08.21 -
unsorted bin attack unosrted bin attack은 해제된 청크의 BK를 조작할 수 있을 때 임의 주소에 main_arena 영역의 주소를 쓸 수 있는 공격기법이다. 쓰이는 값은 특정 버퍼의 사이즈를 덮는 등 추가적인 공격은 연계하기 위해 사용된다. unsorted bin은 fastbin과 다르게 청크를 처음 해제하면 FD와 BK에 main_arena주소가 쓰인다. #include #include int main() { char *ptr = malloc(0x100); char *ptr1 = malloc(0x100); free(ptr); return 0; } free 했을 때 gdb로 보면 FD와 BK에 0x00007ffff7dd1b78 주소가 쓰인다. 이 주소를 보면 main_are..
unsorted bin attackunsorted bin attack unosrted bin attack은 해제된 청크의 BK를 조작할 수 있을 때 임의 주소에 main_arena 영역의 주소를 쓸 수 있는 공격기법이다. 쓰이는 값은 특정 버퍼의 사이즈를 덮는 등 추가적인 공격은 연계하기 위해 사용된다. unsorted bin은 fastbin과 다르게 청크를 처음 해제하면 FD와 BK에 main_arena주소가 쓰인다. #include #include int main() { char *ptr = malloc(0x100); char *ptr1 = malloc(0x100); free(ptr); return 0; } free 했을 때 gdb로 보면 FD와 BK에 0x00007ffff7dd1b78 주소가 쓰인다. 이 주소를 보면 main_are..
2023.05.30 -
AES(Advanced Encryption Standard) AES는 DES가 더 이상 안전하지 않게 되자, 2001년에 새롭게 표준으로 선정된 블록 암호 알고리즘이다. AES원리 AES는 SPN(Substitution Permutation Network)이라는 암호 구조를 사용한다. SPN은 곱 암호의 일종으로, S-Box를 사용하는 치환과 P-Box를 사용하는 순열을 여러 라운드에 걸쳐 반복한다. AES는 라운드마다 128bit 크기의 블록을 암호화하는 블록 암호이다. 키의 길이는 128, 192, 256중 하나를 선택할 수 있고, 라운드 수는 키의 길이에 따라 10, 12, 14로 결정된다. 그래서 키의 길이에 따라 AES-128, AES-192, AES-256으로 부른다. AES를 암호화 할 때,..
AESAES(Advanced Encryption Standard) AES는 DES가 더 이상 안전하지 않게 되자, 2001년에 새롭게 표준으로 선정된 블록 암호 알고리즘이다. AES원리 AES는 SPN(Substitution Permutation Network)이라는 암호 구조를 사용한다. SPN은 곱 암호의 일종으로, S-Box를 사용하는 치환과 P-Box를 사용하는 순열을 여러 라운드에 걸쳐 반복한다. AES는 라운드마다 128bit 크기의 블록을 암호화하는 블록 암호이다. 키의 길이는 128, 192, 256중 하나를 선택할 수 있고, 라운드 수는 키의 길이에 따라 10, 12, 14로 결정된다. 그래서 키의 길이에 따라 AES-128, AES-192, AES-256으로 부른다. AES를 암호화 할 때,..
2023.05.27 -
Unsafe unlink 해제된 청크들을 연결하는 이중 연결 리스트에서 청크를 연결해제하는 매크로인 unlink를 이용하여 Arbitrary write를 하는 공격 기법이다. unlink 매크로는 인접한 2개 이상의 청크를 연속해서 해제했을 때 인접한 청크를 병합하기 위해서 사용된다. 소스코드를 보면 prev_inuse 비트가 0인지 확인한다. 0이면 이전 청크가 해제되었다는 뜻이니까 unlink 매크로를 실행한다. FD->bk = BK, BK->fd = FD를 하기 전에 현재 청크의 포인터인지를 검증한다. 그리고 현재 P의 청크가 해제되었을 때 인접한 청크를 병합하기 위해 FD를 P->fd로 설정하고, BK를 P->bk로 설정한다. 왜냐하면 P를 병합하면 BK의 정보와 FD의 정보가 연결되어야 하기 때..
Unsafe unlinkUnsafe unlink 해제된 청크들을 연결하는 이중 연결 리스트에서 청크를 연결해제하는 매크로인 unlink를 이용하여 Arbitrary write를 하는 공격 기법이다. unlink 매크로는 인접한 2개 이상의 청크를 연속해서 해제했을 때 인접한 청크를 병합하기 위해서 사용된다. 소스코드를 보면 prev_inuse 비트가 0인지 확인한다. 0이면 이전 청크가 해제되었다는 뜻이니까 unlink 매크로를 실행한다. FD->bk = BK, BK->fd = FD를 하기 전에 현재 청크의 포인터인지를 검증한다. 그리고 현재 P의 청크가 해제되었을 때 인접한 청크를 병합하기 위해 FD를 P->fd로 설정하고, BK를 P->bk로 설정한다. 왜냐하면 P를 병합하면 BK의 정보와 FD의 정보가 연결되어야 하기 때..
2023.05.23 -
DES(Data Encryption Standard) DES는 IBM의 루시퍼 알고리즘을 개량하여 만든 대칭키 알고리즘이다. DES는 8byte가 한 블록으로 하는 블록 암호이며, 전체 구조는 초기 순열(Initial Permutation, IP), 최종 순열(Final Permutation, FP), 페이스텔(Feistel) 구조의 16라운드, 그리고 각 라운드에 사용되는 48bit의 키를 생성하는 키 생성 구조로 구성되어 있다. DES 원리 DES는 치환(Substitutation)과 순열(Permutation)을 사용하여 혼돈 성질과 확산 성질을 만족시킨다. 치환과 순열은 매우 단순한 연산이므로 한 번 적용한다고 해서 암호학적 효과를 기대할 수 없지만, 여러 번 교차해서 사용하면 혼돈과 확산 두 성..
DESDES(Data Encryption Standard) DES는 IBM의 루시퍼 알고리즘을 개량하여 만든 대칭키 알고리즘이다. DES는 8byte가 한 블록으로 하는 블록 암호이며, 전체 구조는 초기 순열(Initial Permutation, IP), 최종 순열(Final Permutation, FP), 페이스텔(Feistel) 구조의 16라운드, 그리고 각 라운드에 사용되는 48bit의 키를 생성하는 키 생성 구조로 구성되어 있다. DES 원리 DES는 치환(Substitutation)과 순열(Permutation)을 사용하여 혼돈 성질과 확산 성질을 만족시킨다. 치환과 순열은 매우 단순한 연산이므로 한 번 적용한다고 해서 암호학적 효과를 기대할 수 없지만, 여러 번 교차해서 사용하면 혼돈과 확산 두 성..
2023.05.23 -
Web cache poisoning 웹 캐시 포이즈닝은 해커가 웹 서버 및 캐시의 동작을 악용하여 유해한 HTTP 응답이 다른 사용자에게 전달되는 공격이다. 기본적으로 웹 캐시 포이즈닝 공격은 2단계로 진행된다. 먼저 해커는 백앤드 서버로부터 조작된 페이로드를 응답하는 방법을 알아야 한다. 성공하면 응답이 캐시에 저장되어 공격 대상자에게 전달되는지 확인해야 한다. 취약한 웹 캐시는 XSS, Javascript injection, open redirection와 같은 공격을 시도할 수 있다. Web cache poisoning research 이 취약점은 2018년 "Practical Web Cache Poisoning" 연구 논문을 통해 처음으로 대중화되었으며, 2020년에 "Web Cache Entan..
Web cache poisoningWeb cache poisoning 웹 캐시 포이즈닝은 해커가 웹 서버 및 캐시의 동작을 악용하여 유해한 HTTP 응답이 다른 사용자에게 전달되는 공격이다. 기본적으로 웹 캐시 포이즈닝 공격은 2단계로 진행된다. 먼저 해커는 백앤드 서버로부터 조작된 페이로드를 응답하는 방법을 알아야 한다. 성공하면 응답이 캐시에 저장되어 공격 대상자에게 전달되는지 확인해야 한다. 취약한 웹 캐시는 XSS, Javascript injection, open redirection와 같은 공격을 시도할 수 있다. Web cache poisoning research 이 취약점은 2018년 "Practical Web Cache Poisoning" 연구 논문을 통해 처음으로 대중화되었으며, 2020년에 "Web Cache Entan..
2023.05.14 -
JWT(JSON Web Token) 시스템 간에 암호화된 JSON 데이터를 전송하기 위한 표준 형이다. 이론적으로 JWT는 모든 종류의 데이터를 포함할 수 있지만 인증, 세션처리 및 액세스 제어 메커니즘으로 인하여 일반적으로 사용자의 정보를 보내는 데 사용된다. 서버에 필요한 모든 데이터는 JWT 자체 내에 클라이언트에 저장된다. 따라서 JWT는 사용자가 여러 백엔드 서버와 원할하게 상호작용해야 하는 고도로 분산된 웹 사이트에서 사용된다. JWT Format JWT는 header, payload, signature 3가지 파트로 구성되어 있다. eyJraWQiOiI5MTM2ZGRiMy1jYjBhLTRhMTktYTA3ZS1lYWRmNWE0NGM4YjUiLCJhbGciOiJSUzI1NiJ9.eyJpc3MiO..
JWT AttacksJWT(JSON Web Token) 시스템 간에 암호화된 JSON 데이터를 전송하기 위한 표준 형이다. 이론적으로 JWT는 모든 종류의 데이터를 포함할 수 있지만 인증, 세션처리 및 액세스 제어 메커니즘으로 인하여 일반적으로 사용자의 정보를 보내는 데 사용된다. 서버에 필요한 모든 데이터는 JWT 자체 내에 클라이언트에 저장된다. 따라서 JWT는 사용자가 여러 백엔드 서버와 원할하게 상호작용해야 하는 고도로 분산된 웹 사이트에서 사용된다. JWT Format JWT는 header, payload, signature 3가지 파트로 구성되어 있다. eyJraWQiOiI5MTM2ZGRiMy1jYjBhLTRhMTktYTA3ZS1lYWRmNWE0NGM4YjUiLCJhbGciOiJSUzI1NiJ9.eyJpc3MiO..
2023.05.02