IT 114

[Synchronization] Locks(Mutex)

💡Locks의 개념 ✅Lock 변수 : Lock 변수는 Lock의 상태를 담고 있다. * unlocked: 아무 thread도 lock을 갖고있지 않다. * locked: 딱 하나의 thread가 lock을 갖고 있으며 Critical section 내부에 있다. ✅lock() : lock 획득을 시도한다. 만약 아무 thread도 lock을 갖고있지 않았다면, lock을 획득하고 Critical section에 진입한다. 이 thread가 lock을 갖고있는 동안 다른 thread는 CS 진입이 불가하다. ✅fine-grained approach - better concurrency 여러 개의 변수를 보호하기 위해선 변수마다 하나씩 lock이 있어야 한다. lock() lock() CS1 unlock(..

[Thread] 스레드 사용의 목적, 스레드 vs 프로세스, 스레드의 자원, 스레드 API

💡스레드란 ✅목적 프로세스 간에는 서로의 데이터를 읽을 수 없다. 반면, 스레드끼리는 공유된 메모리를 통해 적은 비용의 커뮤니케이션이 가능하다. 이러한 스레드의 사용으로써, - 리소스가 절약된다. - 여러 request가 감당 가능해진다. - Input/Output 작동과 computation 작동이 동시에 일어날 수 있다. - context switching의 비용이 비교적 덜 든다. - multiprocessor에 더 잘 매핑된다. ✅스레드는 "함수"의 형태로 instruction stream을 실행한다. ✅Process vs. Thread 아래는 한 프로세스에 여러 스레드가 있는 예시이다. 반면 아래는 "프로세스"가 두 개인 것이고, 스레드는 활용되지 않았다. 💡스레드와 Address space 각..

[Process] Process의 개념, Address Space, State, Context switch, API

💡프로세스란 Program: 실행 파일. 코드와 데이터로 이루어져 있음. Process: program의 실행 중인 instance. 💡프로세스의 Address Space (Memory Layout) 모든 각각의 프로세스는 아래와 같이 자신만의 가상 메모리 주소 공간을 가진다. stack: 지역 변수 heap: 동적 할당된 변수 BSS: 초기화되지 않은 정적 변수 data: 초기화된 정적 변수 text: 프로그램 코드 💡프로세스 스케줄링 CPU 안에는 core가 있는데, 이 코어라는 것은 엄밀하게는 한 순간에 하나의 프로세스만을 다룰 수 있으므로, 여러 개의 프로세스가 (거의) 동시에 돌아가기 위해서는 교통정리, 즉 스케줄링이 필요하다. 프로세스의 state ✅New 새 프로세스가 생성되었지만, 아직 운..

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

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

IT/시스템 보안 2024.03.27

[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..

IT/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 함수도 ..

IT/시스템 보안 2024.03.15

[Return to Library]

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

IT/시스템 보안 2024.03.12

[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..

IT/역공학 2024.03.10

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

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

IT/역공학 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..

IT/Wargame 2024.03.07