일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- MAC
- 유스케이스
- STCF
- DP
- Race condition
- sampling theory
- 메카님
- Security
- RBAC
- Unity #Indie Game
- 유니티
- MLFQ
- 배경 그림
- stride
- AINCAA
- polymorphism
- pdlc
- dtft
- SNR
- Frequency Response
- convolution
- DSP
- ret2libc
- 운영체제
- dirty cow
- 게임 개발
- link layer
- linear difference equation
- frequency-domain spectrum analysis
- 게임개발
- Today
- Total
목록운영체제보안 (31)
다양한 기록
Access Control어떤 주체가 특정한 Access Operation으로 어떤 객체에 접근할 수 있는지를 제어하는 것=> 자원의 무단 사용을 방지 RFC 2828의 컴퓨터 시큐리티 정의컴퓨터 시스템에서 보안 서비스를 구현하고 보장하는 조치,특히 접근 제어 서비스를 보장하는 조치 Authentication vs. Authorization인증: 진짜 그 개체가 맞는가?인가: 접근할 자격이 있는가? Identification & Authorization- Identification: username, uid, gid- Authentication: password, fingerprint, iris, face, voice, gesture Access Control: 장소 또는 기타 자원에 대한 선택적 접근 ..
1. SELinux나 AppArmor 정책 강제- 우분투에서 미는 건 앱아머, 레드햇 계열에서 미는 건 SE리눅스 2. sysctl 로 튜닝해서 커널 구성 강화sudo sysctl -w kernel.randomize_va_space=2sudo sysctl -w fs.protected_symlinks=1sudo sysctl -w kernel.unprivileged_userns_clone=0- 위 명령어처럼 커널 구성 강화 가능 3. Live Patching 구현- 재부팅 안하고 패치 가능하도록 4. 커널 네임 스페이스 활용- 프로세스 각자에 독립적인 자원 뷰를 제공하여 격리- pid, net, mnt 같은 네임 스페이스가 예시 5. eBPF를 사용한 커널 행위 실시간 모니터링- eBPF (Extended ..
Copy on Write 3 Step(A) 매핑된 메모리의 카피를 만들기(B) 페이지 테이블 업데이트 (-> 버추얼 메모리가 피지컬 메모리의 새로운 장소를 가리킴)(C) 메모리에 쓰기 이 위의 세 스텝은 원자적이지 않음-> 다른 스레드들이 레이스 컨디션을 일으킬 수 있음madvise()가 (B)와 (C) 사이에 실행..=> 카피를 만들어뒀더니 쓰기 직전에 원본으로 바꿔치기됨 Attack#include #include #include #include #include #include #include void *map;void writeThread(void *arg){ char *content = "username:x:0000"; off_t offset = (off_t)arg; int f = ..
Kernel Local Privilege Escalation "Dirty COW", CVE-2016-5195레이스 컨디션의 한 케이스 int main(){ struct stat st; char content[20]; char *new_content = "New Content"; void *map; int f = open("./zzz", O_RDWR) fstat(f, &st); map = mmap(NULL, st.size, PROT_READ | PROT_WRITE, MAP_SHARED, f, 0); // read 10 bytes memcpy( (void*)content, map, 10 ); printf("read: %s\n", co..
Copy-on-Write부모와 자식 프로세스가 초기엔 메모리의 같은 페이지 프레임을 공유할 수 있게 함 (* 페이지 테이블 관련 내용은 운영체제 카테고리 참조) 이유:보통 프로세스들은 fork 이후 exec해서 다른 프로그램이 됨=> 굳이 쓰지도 않을 메모리를 복제하면 낭비니까 일단 부모 자식 간 프레임 공유를 시킴 처음엔 공유 시키고, Write 시 복제를 함 (copy on write) 물론 각각 PCB 따로 가지니까 페이지 테이블은 각각 가지지만,페이지 테이블 엔트리가 가리키는 페이지 프레임이 공유됨 1. 부모 프로세스와 자식 프로세스는 둘 다 일단 read-only로 마크됨- read시에는 아무 상관 없음2. 자식 프로세스가 write 요청- Protection fault 발생 -> 커널이 페이지..
ToCTToU (Time of Check-to-Time of Use) Vulnerability- 액세스 체크와 오픈 사이에 바꿔치기를 함 루트 소유 setuid 프로그램* 이거 아니면 애초에 /etc/passwd 못열음if( !access("/tmp/X", W_OK) ){ f = open("/tmp/X", O_WRITE); write_to_file(f);}access는 특이한 시스템 콜.. ruid 기반으로 권한 체크함open은 euid 기반으로 체크함열고 싶은 파일은 /etc/passwd .. 열어서 루트 계정을 추가하고자 함 (uid, 즉 세번째 필드가 0) 목표: /etc/passwd같이 보호되는 파일에 쓰기- 심볼릭 링크가 도움이 됨 Sticky Directory- 누구나 파일을 만들 ..
여러 스레드, 프로세스가 공유자원을 업데이트할 때 문제가 발생 (읽기만 하면 그럴 일 없음)프로세스나 스레드의 실행 순서에 의존적인 결과ex. 데이터베이스해결하기 위해 mutex 락, 언락이런 부분이 어떻게 공격으로 연결되는가 .. #include #include void main(void){ int pid; printf("PID = %d, in BEGIN printf\n", getpid()); pid = fork(); if( pid == 0 ) { for( int k = 0; k 0 ) { for( int n = 0; n 예시 코드슬립 시 자동 문맥 교환 (usleep이니 마이크로 단위)아무튼 출력 결과가 다르게 나옴(순서)여기서 공유 ..
공격자는 system()을 쓰고 싶은데 libc에 없음..=> fork 다음 exec을 할 수 있음 공격자 입장- 악의적인 코드 주입, 라이브러리 함수 호출도 안하고, 본래 코드 조작도 안하고 임의의 연산을 하는 방법을 만들어보자-> ROP* 그러나 여전히 스택 내용은 변조해야 함 명령어의 조각을 찾아야 함명령어들의 순차 .. 각 sequence는 2~5개의 명령이고, return 으로 끝남시퀀스들이 체이닝되어 모여 가젯 (gadget)가젯은 특정한 일을 수행 (ex. 로드, 스토어, xor, branch)=> 가젯들을 결합하여 원하는 액션을 강제로 시퀀스들을 차례차례 실행하게 하고 싶으면 버퍼를 넘치게해서 각 시퀀스들의 시작 주소들을 넣으면 됨 ROP- 인스트럭션 시퀀스와 가젯의 관계- Instruct..