자격증/정보보안기사

[시스템 보안] 시스템 해킹

집으로가고싶다 2022. 8. 2. 12:28
주제 내용
버퍼 오버플로우 공격(BOF)
1. 관련함수
 1) strcpy(char *dst, const char *src)
 2) strncpy(char *dst, const char *src, size_t len) 

2. 대응방안
 1) 안전한 함수 사용
   - strncpy(buffer,argv[1],sizeof(buffer)-1)) : C언어 문자열은 null문자로 끝나도록 정의
 2) 입력값 사전 검증
   - if(strlen(argv[1]) >= sizeof(buffer)) 
 3) Stack Shield : Global RET 설정
 4) Stack Guard : Canary Word 설정
   - RET 와 변수 사이에 특정 값(Canary Word)을 저장
   - 해당 값이 변경될 시, BOF 공격 탐지 가능
 5) ASLR : 주소 공간 배치의 난수화
   - 실행 시마다 메모리의 주소 변경
   - BOF 공격을 통한 특정 주소 호출 차단
   - 설정 방법 : echo 2 > /proc/sys/kernel/randomize_va_space
레이스 컨디션 공격(Race Condition)
1. 단계
 1) 가정
   - 둘 이상의 프로세스/스레드가 공유자원에 접근
   - setuid 가 설정된 프로그램이 동작하면서 임시 파일을 생성
 2) 프로세스의 실행 중에 끼어들어 임시 파일을 목적 파일로 연결
 →  아... 그니까  (추후 수정 예정)
   1) 위의 가정을 만족하는 프로세스가 만드는 파일과 동일 이름의 파일을 미리 생성
   2) 변조를 원하는 대상 파일에 대한 심볼릭 링크를 걸어놓는다.
   3) 임시 파일에 조작된 입력값을 write하는 파일을 실행한다
       (심볼릭 링크 파일을 수정하면 원본 파일도 동일하게 수정됨)
   4) 원본 파일을 변조한다.

2. 대응방안
 1) 가능한 임시 파일 생성 X
 2) 파일 생성 시, 이미 동일한 파일이 존재할 경우 생성 또는 쓰기 금지
 3) 사용하고자하는 파일에 링크가 있을 시, 실행 중단
 4) umask를 최하 022정도로 유지 → 임시생성파일의 삭제 방지

포맷 스트링(Format String)
1. 정의
 1) 포맷 스트링 : C언어의 printf() 함수 등에서 문자열의 입출력형태 정의하는 서식문자
 2) 외부로부터 입력 값을 검증하지 않고 입출력 함수 포맷 스트링을 그대로 사용하는 경우 발생
 3) 사용자 입력을 통해서 포맷 스트링을 결정하면서 생기는 취약점
 4) printf() 함수 입장에서 포맷 스트링이 들어오면 " 어?? 포맷 스트링만 있고 출력할 변수가 없네?" 그러면서 이전 메모리 값들을 하나씩 출력한다.

2. 식별자 : %d, %f, %c, %s, %x, %n(→ 해당 식별자만 저장/입력하기 위한 식별자 / 이전까지 입력한 총 바이트 수를 지정한 변수에 저장)

3. 대응방안
 - 포맷 스트링을 함수의 입력 파라미터로 사용 금지