IT 114

[Heap overflow] Heap overflow의 과정, Exploit, Countermeasures

💡Heap overflow의 과정 ✅예시 프로그램 코드   ✅after strcpy(c, ...)   ✅after free(b)chunk B에 fd, bk 포인터가 생기며,이것이 bin_forward, bin_back과 연결됨으로써, free된 chunk B는 bin에 들어간다.  ✅after strcpy(a, ...) chunk A에, 이것의 크기에 비해 과분한 양의 string이 들어간다.🚩따라서 string은 chunk A의 data 공간을 다 채우고 나서 higher address 방향으로 흘러넘쳐 chunk B를 corrupt시킨다.  ✅after free(a) chunk A도 free되어 fd, bk 포인터가 생겼고,이 포인터들이 기존의 bin (free chunk list)과 연결됨으로써..

IT/시스템 보안 2024.04.21

[Scheduling in multiple CPU] SQMS, MQMS, CFS, O(1), BFS

Cache Affinity프로세스가 가능한 한 하나의 CPU에서만 실행되게 하는 것 -> 해당 프로세스의 state가 이미 그 CPU의 cache에 남아있으므로, 다음 번에 프로세스가 실행될 때 훨씬 빨라진다. 만약 cache에 해당 프로세스의 state가 없다면, main memory에서 가져와야 하는데, 이것은 cache에 비해 매우 느림. 💡scheduling 방식✅SQMS: Single queue Multiprocessor Scheduling스케줄되어야 하는 job들이 한 queue에 전부 들어가 있다.   단점 - 단일 queue가 여러 CPU에게 공유되어야 하므로 locks가 필요한데, 이 locks는 성능을 크게 떨어뜨리고 scalability가 낮다.- 프로세스들은 매번(매 time sl..

[Scheduling in single CPU] FIFO, SJF, STCF, RR, MLFQ, Lottery, Stride, CFS

💡Scheduling이란?멀티프로그래밍 시스템 (: 실행이 준비된 프로세스가 두 개 이상)에서, OS의 일부인 scheduler는 scheduling 알고리즘을 이용해 무엇을 실행할지 결정한다.🚩스케줄러는 아래와 같이 context switch가 일어나는 모든 순간 invoke되어 다음 실행할 프로세스를 결정한다.   프로세스 생성/종료 후   I/O에서 프로세스 block   I/O 인터럽트 발생    timer 인터럽트 발생 (preemtive한 경우)   ✅스케줄링을 평가하는 metricsturnaround time = 완수된 시점 - 도착한 시점 response time = 처음으로 실행된 시점 - 도착한 시점 fairness = first job이 완수되는 시간 / second job이 완수..

[Format String Bug] with Variable length arguments

💡Format String Bug (FSB)란?위와 같이,format functions에서,format string 내의 format specifier의 개수 != format string을 제외한 argument의 개수인 경우,짝이 없는 format specifier는 메모리 내의 임의의 데이터를 출력해낸다.즉 memory disclosure 취약점이 발생하는 것이다.   ※ format function의 종류 ※ format specifier란? ※ format string란?format specifier가 포함된 string  💡배경 지식: Variable length arguments를 이용하는 함수는 어떻게 구현돼있을까? ✅Variable length arguments를 이용하는 함수의 아주..

IT/시스템 보안 2024.04.15

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