1 리눅스 시스템 보안
1) 사용자 정보 저장 파일
(1) /etc/passwd
- 시스템에 현재 등록되어 있는 계정 정보들의 리스트 포함
(2) /etc/shadow
- 파일에 있는 계정 정보와 연관된 암호화된/해시화된 패스워드들 포함
- 칼리는 모의 해킹용이므로 /etc/shadow 파일에 권한을 부여함
2) 액세스 권한
(1) 액세스 권한
- umask 값에 의해서 결정 (기본값 022)
- /etc/bashrc 파일에 정의되어 있음
(2) 최대 권한
- 파일: rw-rw-rw(666)
- 디렉토리: rwxrwxrwx(777)
(3) 기본 권한
- 파일 : rw-r--r-- | 최대권한 666 - umask 022 = 644
- 디렉토리 : rwxr-xr-x | 최대권한 777 - umask 022 = 755
3) 액세스 권한 상승
(1) UID, GUID
- 사용자 계정을 식별하는데 사용됨
- 일시적인 권한 상승이 일어나는 경우 X
(2) EUID
- 사용자 계정의 액세스 권한을 나타내는데 사용됨
- UID와 시작 시점에서 동일하나 권한 상승에 의해 일시적으로 변화하는 경우 O
(3) 액세스 권한 상승
- 실행 파일이 SerUID 비트 가질 때 특정 파일이 실행되는 동안 권한 상승 일어남
4) 액세스 권한 상승 실습 / 실패
(1) 실습
- syssec 사용자 만들기
- syssec 사용자로 로그인하기
- /bin/bash 파일을 현재 디렉토리로 복사하고 권한 확인
- chmod 명령어로 권한을 상승하면 SetUID가 부여된 것을 알 수 있음
- id를 확인하고 bash 파일을 실행했지만 권한 상승이 일어나지 않음 > 실패 !
- bahs shell 빠져나옴
(2) 실패이유
- 복사한 /bash 파일의 소유자가 root 아님
- SetUID를 설정한 주체가 root가 아님 일반 사용자임
5) 액세스 권한 상승 실습 / 성공
(1) 실습
- root/Desktop에 setuid.c 파일 작성
- root 권한 | Desktop에서 setuid.c 컴파일, chmod를 통해 setUID로 권한 변경
- setUID 파일을 /home/syssec 디렉토리로 복사 후 컴파일
- SetUID 권한 부여
- syssec | setUID 파일을 실행하면 권한이 상승되는 것을 확인할 수 있음 > 성공
6) 하드링크와 심볼릭 링크
(1) 하드링크
- ln 원본파일 하드링크파일
- 하드링크 후에 두 개의 파일이 존재 (동기화)
- 둘 중 하나의 파일이 삭제되면 링크의 수는 1 감소하나 파일의 내용은 변하지 않음
(2) 심볼릭링크
- ln -s 원본파일 심볼릭링크
- 심볼릭 링크 후 하나의 원본 파일만 존재, 원본 파일에 대한 링크만을 포함함
- 장점: 별도의 파일을 생성하지 않으므로 저장공간의 효율성 높음
- 중요한 원본을 심볼릭링크로 걸었다면 원본이 지워지면 더이상 접근이 불가함
7) 레이스 컨디션 공격
(1) 개념
- 조건 1 : 동작중인 프로그램을 대상으로 공격을 수행해야 함
- 조건 2 : 공격대상 프로그램은 임시파일을 사용해야 함
- 조건 3 : 공격자는 임시 파일의 이름을 알고 있어야 함
- lsof 명령어 : 하나의 프로세스에 대해 사용되는 파일 리스트 출력
- 동작하는 프로세스와 프로세스 번호 알아냄
(2) 희생자 프로세스에 대한 공격
- 프로세스 시작
- 임시 파일에 대한 공격 * 임시파일이 열리기 전에 심볼릭링킹을 끝내야 함 (공격자)
- 임시 파일 열기
- 임시 파일에 대한 작업 수행
- 임시 파일 닫기
- 프로세스 종료
(3) 사례연구 | 복호화에 대한 공격
- 프로세스 시작
- 임시 파일에 대한 심볼릭 링크 *복호화된 평문값을 알기 위해 임시 파일이 열리기 전 심볼릭 링크 걸어줘야 함 (공격자)
- 암호문을 복호화하고 복호화된 평문을 임시파일에 저장
- 임시파일 닫기
- 프로세스 종료
- 복호화하는 decipher.c 파일을 gcc 명령어로 컴파일
- decipher에 대한 출력값을 tmp에 저장하는 과정을 백그라운드에서 실행
- 임시파일인 tmp에 심볼릭 링크를 걸어 tmp가 삭제되어도 공격자의 decrypt가 유지되도록 함
- decrypt 파일을 확인하면 복호화된 평문이 들어와 있음
* decrypt.c 코드에 sleep(20) 포함 > 임시파일 열리기 전 링킹이 일어나게 하도록 위함
* 임시파일이 열리고 심볼릭 링킹되면 > 입력값의 일부만 들어올 수 있음
* 링킹 시 두 파일을 반대로하면 > 원본 파일이 임시파일일 경우 해당 내용이 제대로 보이지 않을 수 있음