전체 글 130

[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

[행정상 법률관계] 행정상 법률관계의 의미, 종류, 행정법관계의 당사자, 특색

💡행정상 법률관계의 의미법률관계: 권리주체 상호간의 권리의무관계- 일방 당사자는 다른 쪽 당사자에 대하여   일정한 작위·부작위·급부·수인을 요구할 수 있는 권리를 가지고, 다른 쪽 당사자는 이에 따른 의무를 부담하는 관계 V행정상 법률관계: 행정주체(= 국가 또는 공공단체) & 상대방 간의 권리의무관계- 행정상 공법관계와 행정상 사법관계로 구분됨 V  행정법관계 행정상 공법관계  💡행정상 법률관계의 종류 ✅행정조직법적 관계 행정조직(행정주체) 내부관계eg) 국가의 내부기관, 지자체의 내부기관 간의 관계- 행정내부기관은 독립한 권리주체성이 없음 -> 분쟁이 발생해도 행정소송 대상 안됨  행정주체 상호간의 관계eg) 국가 간, 국가와 지자체 간, 지자체 간..

2024.04.12

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

[행정법의 효력] 시간적 효력, 지역적 효력, 대인적 효력

💡시간적 효력 ✅소급적용: 새로운 법령이 과거에 종결된 법률관계나 사실관계에 적용되는 것 진정소급법령의 시행 이전에 이미 종결된 사실이나 법관계에 적용됨 부진정소급법령의 시행 이전에 시작됐으나 현재에도 진행 중인 사실이나 법관계에 적용됨  ✅소급적용금지의 원칙 진정소급: 원칙적으로 금지 - 예외: 이 경우엔 허용 가능소급입법을 예상할 수 있는 경우,소급입법에 의한 당사자의 손실이 매우 작은 경우,소급입법을 정당화하는 중대한 공익 상의 사유가 있는 경우 등  부진정소급: 원칙적으로 허용 - 현재에도 진행 중인 사건에 대한 새 법령 적용이므로 - 예외: 이 경우엔 제한 신뢰보호의 이익을 보장해야 할 경우  ✅처분 시 적용법령의 문제: 일정한 법령위반행..

2024.04.05

[개인정보보호법] 개인정보 활용단계의 법적 보호

💡개인정보 활용의 기본원칙 ✅ 개인정보처리자는 해당 처리를 시작하기 전에 공개한 ‘구체적이고 명백한’ 해당 목적을 위해서만 처리가 가능 - 동의받은 범위를 초과하여 이용하거나 제3자에게 제공할 수 없음 ✅ 개인정보처리자가 정보주체의 개인정보를 제3자에게 제공하려는 경우: 다음의 사항을 알려야 함 ① 개인정보를 제공받는 자 ② 개인정보를 제공받는 자의 개인정보 이용 목적 ③ 제공하는 개인정보의 항목 ④ 개인정보를 제공받는 자의 개인정보 보유 및 이용 기간 ⑤ 동의를 거부할 권리가 있다는 사실 및 동의 거부에 따른 불이익이 있는 경우에는 그 불이익의 내용 ✅ 만약, 제3자 제공에 대한 동의를 받은 이후 위의 고지사항 중 어느 하나를 변경하고자 하는 경우: 정보주체에게 동의를 받아야 함 💡목적 범위 내 이용 ..

2024.04.01

[행정법의 법원] 성문법원, 불문법원

- 외부법: 행정과 행정 외부에 있는 국민과의 관계를 규율 vs. 내부법: 행정 내부간의 관계를 규율- 법규: 외부법 + 내부법 vs. 법규범: 외부법- 법원의 개념  광의: 행정규칙을 포함한 일체의 내부법과 외부법 vs 협의: 외부법 - 행정법의 법원은 성문법주의이며, 성문법규에서 부족한 부분은 불문법에 의해 보완된다. 성문법원의 종류 헌법- 국법질서의 최고에 위치 - 국가권력 조직, 국민의 기본적 권리와 의무를 규율 - 행정권발동의 근거가 되는 법률에 대한 합헌성 심사의 척도 - 행정법의 으뜸법원, 행정활동의 범위와 기준 제시  법률: 국회가 제정한 형식적 의미의 법률 - 스스로 행정법관계에 직접적으로 해석/적용되는 법원으로서의 기능, 하위법규인 법규명령과 자치법규 등에 대한..

2024.04.01

[행정법의 관념] 행정에 관한 법, 공법/사법의 구별, 법치행정의 원리

행정에 관한 법✅행정조직법국가, 공공단체 등의 행정주체의 기관의 설치, 권한, 기관 상호간의 관계✅행정작용법국가, 공공단체 등의 행정주체가 공익을 실현하기 위한 행정의 행위형식 ✅행정구제법위법, 부당한 작용으로 인해 권익침해를 주장하는 사인의 권리구제. - 행정상 손해전보 & 행정쟁송. 공법/사법의 구별 공법/사법 구별의 필요성✅재판관할과 소송절차의 기준 사법관계에 대한 분쟁: 민사소송 공법관계에 대한 분쟁: 행정소송✅적용법리의 결정 사법 - 개인 의사의 자율성 존중됨 공법 - 공익 실현을 위해 행정주체에게 일방적으로 강제하고 명령하는 우월적 지위 인정✅행정강제 및 소멸시효 행정상의 의무 위반 -> 행정주체가 직접 행정강제수단을 통해 의무이행을 확보할 수 있음BUT 사법상의 의..

2024.04.01

[행정법 서론] 행정의 개념, 통치행위, 행정의 분류

행정의 개념 형식적 의미 제도/형식적 개념으로서, 권력분립을 바탕으로 입법/사법/행정권 중 행정권이 행하는 국가작용 - BUT 입법/사법작용을 하기도 함 실질적 의미 ✅긍정설 소극설 국가작용 중, 입법/사법을 제외한 나머지가 행정이다. 적극설 목적실현설 행정은 국가의 법질서 아래 국가목적을 실현하기 위해 행하는 작용이다. 양태설 행정은 법률 범위 내에서 법에 의거해 행해지는 장래에 대한 계속적인 사회형성활동이다.. ✅부정설 법단계설 법학은 근본규범->헌법->법률->명령으로 개별/구체화되는 과정만을 연구대상으로 한다. 모든 국가작용은 결국 법단계의 구체화과정이므로, 여기엔 법 정립/선언/집행의 성질을 아울러 가지고 있어, 입법/사법/행정의 구별이 없다. 통치행위 - 재판 통제에서 제외됨 - 법치주의 적용 ..

2024.04.01

[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

[개인정보보호법] 개인정보, 정보주체, 개인정보처리자, 개인정보처리방침, 개인정보 수집단계의 법적 보호

개인정보 "살아 있는" "특정 개인"을 "알아볼 수 있는" 정보. - 성명, 주민등록번호, 신체, 정신, 재산상, 사회적 등의 정보 - 가명정보도 포함됨 유사 개념들? ✅민감정보 및 고유식별정보 - 사상·신념, 조합이나 정당, 정치적 견해, 건강, 성생활, 유전정보, 범죄 이력 등 - 개인을 고유하게 구별하기 위하여 부여된 식별정보(주민등록번호, 여권번호, 운전면허번호, 외국인등록 번호) ✅비밀정보 ➢ "비밀": 타인에게 알려지지 않은 사실 또는 제한된 사람에게만 알려진 사실(비공개성). 타인에게 알려지지 않는 것이 본인에게 이익이 되는 사실을 의미(실질비성) ➢비밀정보는 공개된 개인정보보다 두터운 법적 보호를 받게 됨 ✅행태정보 및 평가정보 ➢ 일반 소비자의 소비행태 → 개인정보 X / 특정 소비자의 ..

2024.03.25

[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

[인터넷 거버넌스] ICANN, UDRP, 인터넷주소자원에관한법률

ICANN ICANN은 인터넷의 주요 기술적 자원의 관리를 담당하는 비영리 단체이다. 전 세계 DNS의 중앙 데이터베이스를 관리하고, 도메인 네임과 IP 주소가 서로 매핑될 수 있도록 하며, IP 주소 공간을 할당하고 관리한다. 이외에도 인터넷의 다양한 기술적 규약과 프로토콜 파라미터를 설정, 관리할 수 있다. 이로써 인터넷의 안정성 / 보안 / 상호 운영성을 유지한다. ✅운영 방식 정부와 전문가, 인터넷 사용자 등 여러 이해 관계자 그룹으로부터 구성된 Multistakeholder 모델을 기반으로 운영된다. ICANN의 운영 근거는 주로 미국 정부와의 계약 및 협약에 기반을 두고 있었으나, 2016년 10월 ICANN의 운영이 글로벌 인터넷 커뮤니티로 이전되면서, 더욱 다양한 글로벌 이해관계자들의 참여..

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

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

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

IT/시스템 보안 2024.03.05

[System Hacking] basic_exploitation_000

Description 프로그램의 취약점을 통해 셸을 획득한 후, "flag" 파일을 읽어야 한다. 공격 대상의 코드 #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); } int main(int argc, char *argv[]) { char buf[0x80]; // 128바이트 initialize(); printf("buf = (%p)\n", buf); scanf("%..

IT/Wargame 2024.03.02

[Stack Buffer Overflow] Return Address Overwrite을 통한 실행 흐름 조작

Return Address Overwrite Buffer overflow를 통해 stack의 return address 값을 조작하면, 프로세스의 실행 흐름을 조작할 수 있다. 취약점 분석 취약점이 있는 코드: rao.c #include #include void init() { setvbuf(stdin, 0, 2, 0); // setvbuf(FILE 구조체에 대한 포인터, 버퍼, 버퍼링 모드, 버퍼 크기(바이트)) setvbuf(stdout, 0, 2, 0); } void get_shell() { char *cmd = "/bin/sh"; char *args[] = {cmd, NULL}; execve(cmd, args, NULL); } int main() { char buf[0x28]; init(); pr..

IT/시스템 보안 2024.03.01