IT 118

[Synchronization] Condition Variables

💡Condition variables스레드가 실행을 하면 안되는 상황(특정 조건 미충족 등)일 때 자기 스스로를 넣어놓는 queue이다. ✅스레드는 condition variable에 대해 아래와 같은 동작을 수행할 수 있다. - wait(condition_variable, lock): 실행하면 안되는 상황일 때, 스레드 자신의 lock을 release하고 스스로를 어떤 queue에 넣음- signal(condition_variable): 스레드 자신의 state를 바꾸면서, waiting하던 다른 스레드 하나를 깨움 ✅condition variable을 이용하기 위해서는 아래 요소도 필요하다.- state variable: child 스레드가 일을 끝냈는지 여부- locks: state variabl..

[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