레이스 컨디션 컴퓨터공학과 4학년 20012069 이교욱.

Slides:



Advertisements
Similar presentations
- 1 - 정보 보안 개론과 실습 시스템 해킹과 보안 팀원 : 박진영 한동섭 · 권혁진.
Advertisements

지하철 안내 앱 소개 제작자 : 손성준 P.S 이 사진은 내용과 관계없음을 명백히 알립니다.( 솔직히 전기동차라는 공통점이 있긴 하지만 ) 그리고 본인이 촬영하였음을 알립니다.
2016 ITA 1월 강의 C Programming -4일차- 포인터배열 및 이중포인터 정대진 ( )
6 레이스 컨디션.
-Part3- 제3장 콘솔 입출력과 파일 입출력.
C 프로그래밍 소개 숙명여대 창병모 2011 가을.
Chapter 10– 표준 함수(1) Outline 10.1 스트림과 파일 10.2 입출력 표준 함수
Linux System Programming
Department of Computer Engineering
9 파이프.
Signal & Inter-Process Communication
디바이스 드라이버 기초 디바이스 드라이버의 개요 파일 연산 디바이스 드라이버 등록 디바이스 드라이버 구성
디바이스 드라이버.
디바이스 드라이버 개요 가상 디바이스드라이버 실습
Department of Computer Engineering
1 유닉스 시스템 프로그래밍 개요.
[beginning] Linux & vi editor
Multi-thread Programming
6 프로세스 생성과 실행.
버퍼 오버플로우에 대한 대책과 발전된 공격 안전한 함수 사용 버퍼 오버플로우에 취약한 함수 사용하지 않기
Linux System Programming
쉽게 풀어쓴 C언어 Express 제16장 파일 입출력 C Express Slide 1 (of 23)
HW#1 Source 파일 제출 3.20(수)까지 제출 학번_이름_01.c
Part 14 파일 입출력 ©우균, 창병모 ©우균, 창병모.
레이스 컨디션.
제 12장 I/O멀티플렉싱(Multiplexing)
버퍼 오버플로우 시스템보안 류기환 권재홍.
Using Standard I/O on Sockets
Department of Computer Engineering
Department of Computer Engineering
12장 파이프.
fork로 생성한 자식 프로세스에서 exec 함수군을 호출
Department of Computer Engineering
9장 파일 입출력.
Linux/UNIX Programming APUE (Files & Directories)
Term Project Team Member
시스템 호출 read , write의 효율성 lseek test example – test1.c 실습 – 연습문제 2.8
파일 기술자 복사 파일 기술자 복사 : dup(2) 파일 기술자 복사 : dup2(3)
12장 파일처리와 매크로 파일 입출력 함수 문자 입출력 함수 라인 입출력 함수 불록 입출력 함수 매크로.
8 메모리 매핑.
(ioctl, mmap, fsync&flush)
6장 파일 및 레코드 잠금.
C언어 프로그래밍의 이해 Ch14. 파일 입출력.
Department of Computer Engineering
14주차.
10장 C 표준 파일 입출력 子曰 學而時習(실습?)之 不亦悅乎.
Chapter 13 Input/Output and Files
5 프로세스 정보.
Work Progress ’ 나소라, 윤민.
17강 파일처리함수(1) 강 의 내 용 파일 입출력의 개념 파일포인터를 이용한 입출력 파일 입출력 과정
제주닷컴 매뉴얼 (실시간 예약시스템) 2013년 10월.
Chapter 3 클래스. 최호성.
12. 시스템 프로그래밍 (System Programming)
Signal & Inter-Process Communication
Memory & Data Management.
많은 자료가 있을 때는 배열을 사용한다. 아래는 배열을 사용하는 경우의 예시이다. 상황에 따라 1차원 또는 다차원 배열 필요.
파일 입출력.
Department of Computer Engineering
Homework #7 (1/4) 다음 프로그램을 작성하고, 프로그램과 실행 결과를 함께 제출한다.
FTZ 과제풀이 Level 11,12 HyunJae Lee
Execution with Unnecessary Privileges
컴퓨터 프로그래밍 기초 - 11th : 파일 입출력 및 구조체 -
구조체(struct)와 공용체(union)
실습과제 1번 생성된 파일 basic.txt를 프로젝트 폴더에서 메모장으로 열고 내용을 확인
9 파이프.
argc, argv 의 사용방법 #include <stdio.h>
Signal & Inter-Process Communication
C 13장. 입출력 라이브러리 #include <stdio.h> int main(void) { int num;
유예 X-FILE *조사자* 1301권희원 1315이예지 1317장아정 1322홍자현.
⊙ 입출력 처리란? data를 입력장치로부터 program 내부로 읽어 들이거나
Presentation transcript:

레이스 컨디션 컴퓨터공학과 4학년 20012069 이교욱

학 습 목 표 레이스컨디션의 정의 하드링크와 심볼릭링크 레이스컨디션 공격 ptrace 레이스 컨디션 공격 학 습 목 표 레이스컨디션의 정의 하드링크와 심볼릭링크 레이스컨디션 공격 ptrace 레이스 컨디션 공격 레이스 컨디션 공격에 대한 대응책

레이스컨디션의 정의 버그를 갖고 있는 setuid프로그램과 해커의 exploit(악의적인 코드)이 서로 경쟁상태(Race Condition)에 이르게 하여, setuid 프로그램의 권한으로 다른 파일에 접근할 수 있게 하는 방법을 말한다.

하드링크와 심블릭링크 하드링크 ln 파일 링크파일 제약점 – 링크할 파일이 다른 파티션이면 안된다. ln a.txt link.txt 제약점 – 링크할 파일이 다른 파티션이면 안된다. 1.파일권한, 2.링크의 수, 3.파일생성계정 4.그룹계정

하드링크와 심볼릭링크 심볼릭 링크 ln의 명령 중 ‘-s’ 옵션을 이용한다. ln –s a.txt symlink.txt 하드링크와 달리 링크 수는 ‘1’ 그대로며, 그대신 symlink.txt -> a.txt와 같은 링크된 파일 정보만 표시된다. Symlink.txt 파일을 수정하면 a.txt 파일의 내용도 수정된다.

하드링크와 심볼릭링크 심볼릭링크 실습

하드링크와 심볼릭 링크 심볼릭 링크 파일을 일반 계정소유로, 원본파일을 관리자 계정소유일 때는 원본 파일이 관리자 계정인 root의 소유이기 때문에 심볼릭 파일을 수정할 수 없다. 원본 파일을 삭제를 하면 심볼릭 링크된 파일은 남지만 파일은 삭제된 것으로 표시가 된다.

레이스컨디션 공격 레이스컨디션의 발생 조건 setuid가 붙어 있는것. 임시파일을 생성할 것. 그 임시파일의 이름을 해커가 미리 알고 있을것. 임시파일을 생성할때 Race Condition에 대한 대처를 하지 않을것.

레이스컨디션 공격 int main (int argc, char * argv []){ struct stat st;       FILE * fp;       if (argc != 3) {               fprintf (stderr, "usage : %s file message\n", argv [0]);               exit(EXIT_FAILURE);       }       sleep (20);       if ((fp = fopen (argv [1], "w")) == NULL) {               fprintf (stderr, "Can't open\n");       fprintf (fp, "%s\n", argv [2]);       fclose (fp);       fprintf (stderr, "Write Ok\n");       exit(EXIT_SUCCESS); }

레이스컨디션 공격 레이스 컨디션 실습

ptrace 레이스 컨디션 공격 ptrace 함수는 다음 장인 ‘8장. 버퍼 오버플로우’에서 배우게 될 GDB(GUN Debugger)구동 시 주로 사용된다. 즉, GDB는 ptrace 함수를 간단히 쓸 수 있도록 만들어 놓은 ptrace 명령어 집합이라고 볼 수 있다. 예를 들어, 함수를 디버깅할 때 GDB는 자식 프로세스로 디버깅하고자 하는 함수를 실행한다. 자식 프로세스로 호출된 대상 프로그램 안에는 GDB에 의해 몇 개의 중단점이 위치하고 자식 프로세스로 실행된 프로그램은 이 지점에서 프로세스를 중지하고, 그 프로세스를 GDB로 다시 넘겨주게 된다. Ptrace에 대한 레이스컨디션 공격은 이러한 원리에 끼어들기를 시도한 것이다. 공격 코드는 자신이 GDB처럼 SetUID가 지정된 프로세스를 찾아 프로세스를 중지시키고, 그 프로세스를 자신이 넘겨 받는 것이다.

ptrace 레이스 컨디션 공격 ptrace기본 명령 구조 cmd:명령 내용 pid:타겟 프로세스의 프로세스ID ptrace(cmd, pid, addr, data); cmd:명령 내용 자식 프로세스의 주소 공간의 4바이트 단위의 워드를 쓰거나 읽기 특정 신호 가로채기 자식프로세스 주소 공간에 감시점(watchpoint)을 설정하거나 제거하기 중단된 자식 프로세스의 수행 재개 자식 프로세스를 싱글 스텝으로 수행 자식 프로세스를 종료 pid:타겟 프로세스의 프로세스ID addr:타겟 프로세스의 주소 공간의 위치 data:데이터 값은 필요에 따라 다르다.

ptrace 레이스 컨디션 공격 ps –ef | grep 7 7 프로세스를 확인해 보면

ptrace 레이스 컨디션 공격 ls –al | grep 7 cd 115

ptrace 레이스 컨디션 공격 ls -al

ptrace 레이스 컨디션 공격 ptrace 공격 실패

레이스 컨디션 공격에 대한 대응책 int safeopen(char *filename) { struct stat st, st2; int fd; if(lstat(filename, &st) != 0) return –1; if(!s_ISREG(st.st_mode)) return -1; if(st.st_uid != 0) fd = open(filename, O_RDWR, 0); if(fd < 0) if(fstat(fd, &st2) ! = 0) { close(fd); } if(st.st_ino != st2.st_ino) || st.st_dev != st2.st_dev) { return fd;

레이스 컨디션 공격에 대한 대응책 if(!s_ISREG(st.st_mode)) if(lstat(filename, &st) != 0) lstat함수는 파일의 심볼릭 링크의 유뮤에 대한 정보를 반환해준다. if(!s_ISREG(st.st_mode)) 구조체 st에 대한 st_mode 값으로 파일의 종류에 대한 것을 확인한다. S_ISBLK- 블록파일 테스트 S_ISCHR- 문자파일 테스트 S_ISDIR- 디렉토리 테스트 S_ISFIFO- FIFO 테스트 S_ISREG- 일반적인 파일 테스트 S_ISLNK- 심볼릭 링크 테스트 Stat함수와 다른점은 filename 매개변수가 심볼릭 링크면 심볼릭 링크가 가리키는 파일의 상태가 아닌 심볼릭 링크의 상태를 반환하는 것이다.

레이스 컨디션 공격에 대한 대응책 if(st.st_uid != 0) 생성된 파일의 소유자가 root가 아닌 경우를 검사한다. 공격자에 의해 자신이 생성한 파일이 삭제되고, 접근하고자 하는 파일이 일반 계정 소유의 파일인지 확인한다. if(fstat(fd, &st2) ! = 0) 파일 포인터에 의해서 열려진 파일의 정보를 모아 st2구조체에 이를 전달한다. if(st.st_ino != st2.st_ino) || st.st_dev != st2.st_dev) 최초 파일에 대한 정보를 저장하고 있는 st와 파일을 연 후의 st2에 저장된 I 노드 값과 장치(device)값이 변경되었는지 확인한다. ptrace 취약점의 경우에는 시스템 패치를 해주거나, 커널을 업그레이드해주는 것 이외에는 별다른 방법이 없다. 따라서 취약점을 주기적으로 점검하는 것이 좋다. 2. 전달되는 데이터에는 장치(device), i노드, 링크의 개수, 파일 소유자의 사용자 ID, 소유자의 그룹ID, 바이트 단위 크기, 마지막 접근시간, 마지막 수정시간, 마지막 바뀐시간, 파일 시스템 입출력(I/O)데이터 블록의 크기, 할당된 데이터 블록의 수 등이 있다.