보안 74

[SetUID] 임시적 권한 상승과 이로 인한 취약점

Mode 먼저 파일이나 디렉토리에 대한 권한을 이해해보자. User: 파일의 소유자 Group: 한 Group에 속한 다수의 User는 동일한 permission을 가질 수 있다. 특정 파일에 대한 동일한 접근 권한을 여러 User에게 줘야 하는 경우 Group을 활용하면 효율적이다. Other: User나 Group에 속하지 않는 모든 User SetUID의 개념 필요성 예를 들어 /usr/bin/passwd (계정의 비밀번호를 변경하는 명령어 실행파일)의 경우, /etc/shadow 파일에 접근하여 비밀번호를 변경한다. 이 passwd 실행파일을 소유자인 root 이외의 사용자가 실행할 경우, 이 사용자는 /etc/shadow(root만 접근 가능함)에 대한 접근 권한이 없기 때문에 오류가 발생하여,..

[System Hacking] basic_rop_x64

스택 프레임 분석 Return address (0x8) SFP (0x8) buf [rbp-0x40] (0x40) 공격 계획 최종 목표: system("/bin/sh") 수행할 것. * system() 주소 구하기 = lib_base + system_offset ** lib_base 구하기 = read() 주소 - read_offset *** read() 주소 구하기 ROP를 통해, write(1, read@got, ...) * "/bin/sh" 주소 구하기 = lib_base + binsh_offset ** system_offset, read_offset, binsh_offset 구하기 libc를 이용 * Return address를 system("/bin/sh")로 Overwrite ROP를 이용 ex..

보안/Wargame 2024.03.19

[Return Oriented Programming]

사용 배경과 목적 system 함수를 활용해 셸을 획득하고자 system 함수의 주소를 알고싶은데,프로그램에서 이 함수가 활용되지 않고, 심지어 ASLR 기법이 적용돼 있는 바람에 바이너리가 실행될 때마다 스택, 힙, 공유 라이브러리 등의 주소가 바뀐다면,우리는 좀더 먼길을 돌아 주소를 얻어야 한다.: 프로세스에서 libc가 매핑된 주소를 찾은 뒤,이 주소로부터 system 함수까지의 offset을 구해서,최종적으로 system 함수의 주소를 얻기 libc.so.6 라이브러리에는 system 함수 뿐 아니라 이 바이너리가 호출하는 read, puts, printf도 정의되어 있는데,라이브러리 파일은 메모리에 매핑될 때 전체가 매핑되므로, read, puts, printf 뿐만 아니라 system 함수도 ..

[Return to Library]

이론  사용 배경과 목적  NX를 우회하여 실행 흐름을 조작하는 것이 RTL의 목적입니다.   NX가 적용되지 않은 경우:어떤 메모리 영역 (eg. 스택 영역)에 쓰기 권한과 실행 권한이 함께 있음 -> 셸코드 주입하여 Return address를 덮어 실행 흐름 조작 가능NX가 적용된 경우:실행될 때 각 메모리 영역에 필요한 권한만을 부여받음-> 일반적으로 셸코드가 주입되었던 위치인 스택 영역이 이젠 실행 권한이 없으므로, 위 방법이 불가해짐따라서, 우리가 직접 주입한 셸코드나, 바이너리에 존재하는 함수는 이젠 활용할 수 없게 됐으니 다른 방식을 찾아봐야 합니다.   원리  리턴 가젯을 활용하여 공유 라이브러리에 있는 함수를 호출하면 NX를 우회할 수 있습니다!  예를 들어, 우리가 현재의 실행 흐름을..

[z3 solver, WinDbg, IDA] 여러 조건문을 만족시키는 flag 찾기 & 디버깅 [@ KUICS]

아래 내용은 고려대학교 정보보호 동아리 KUICS의 수업 내용을 바탕으로 작성한 것입니다. 1. IDA를 통해 실행파일 디컴파일하여 flag 조건 확인 ✅ line 11~14: while문을 통해, v3의 값이 v7의 요소 개수와 같아집니다. ✅ line 37~40: v4 == True여야만 v5가 congratulations!가 됨을 알 수 있습니다. ✅ line 15~36: if ~ ~, else ~ 구조입니다. else가 실행될 경우 v4 = 0 즉 False가 되므로, v4 = True가 될 수 있도록 if가 실행되어야 함을 알 수 있습니다. 따라서 line 15~27이 모두 만족되어야 합니다. (물론 이것이 만족되어도 v4는 아직 0입니다.) ✅ line 30~31: line 30을 만족하면 l..

보안/역공학 2024.03.10

[프로그램 패치] 바이너리 코드 수정하여 프로그램 패치하기 [@ KUICS]

아래 내용은 고려대학교 정보보호 동아리 KUICS의 수업 내용을 바탕으로 작성한 것입니다. 여기 어떤 프로그램이 실행해도 아무 일도 안 일어납니다. 우리는 이 프로그램이 제 기능을 다하도록 패치해 볼 겁니다. 1. objdump 이용해 기계어로 번역하기 2. 원인 파악 위 바이너리를 보아, 프로그램이 갑자기 종료되는 것은 왠지 0x1188 위치에서 killer 함수가 호출되기 때문인 것 같습니다. 3. pwntools의 ELF 객체 이용해 문제의 코드 패치하기 0x1188 위치의 5바이트 만큼의 코드를, 아무 작동이 없다는 의미의 nop의 코드로 대체함으로써, killer 함수의 호출을 없애보겠습니다. 이를 위해선 아래와 같이 코드를 입력합니다. e.address: Address of the lowest..

보안/역공학 2024.03.10

[System Hacking] ssp_001

Description Stack Smashing Protector 기법을 우회하여 익스플로잇해 셸을 획득한 후, "flag" 파일을 읽으세요. 소스코드: ssp_001.c #include #include #include #include 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(30); } void get_shell() { system("/bin/sh"); } void print_box(unsigned char *box, int id..

보안/Wargame 2024.03.07

[Stack Canary] Stack Buffer Overflow로부터 Return address를 보호하기

목적 스택 버퍼 오버플로우 공격으로부터 return address를 보호하기 작동 원리 함수의 프롤로그에서: 스택 버퍼와 반환 주소 사이에 임의의 값 (= 즉 Canary)을 삽입 그 후, 함수의 에필로그에서: 해당 값의 변조를 확인 만약 Canary 값의 변조가 확인되면: 프로세스가 강제 종료됨 공격자가 스택 버퍼 오버플로우를 통해 return address를 overwrite하는 경우, 만약 return address 이전에 canary가 마련돼 있다면, return address overwrite 이전에 필연적으로 canary가 먼저 overwrite 되겠지요. 이때, 공격자는 일반적으로 Canary 값을 모르므로 (공격자가 이 값을 알아내는 특별한 경우도 있는데 다른 글에서 다루겠습니다), 공격 ..