반응형
# 환경 OS : ubuntu 14.0.4.5 LTS /
# 커널 : 4.10.0-42
# 기본적인 /proc/sys/kernel/* 수정방법
- /etc/sysctl.conf에 커널 옵션 값들을 넣어 부팅할 때 수정되도록 하는것.
- sysctl 명령으로 수정.
- /proc/sys/ 디렉토리 내 파일들을 편집기로 열어 수정.
- echo [값] > /proc/sys/kernel/@ 으로 표준 입력으로 파일에 직접 값을 넣어 변경
# 적용 확인
- sysctl -p 명령어를 통해서 확인할 수 있습니다.
# ASLR
- 확인은 cat/proc/self/maps 명령을 통해 자신의 스택 힙 라이브러리 등이 랜덤하게 바뀌는 것을 확인 할 수 있습니다.
- ASLR을 해제하는 명령은 echo 0 > /proc/sys/kernel/randomize_va_space 를 입력하면됩니다. 입력전 vi /proc/sys/kerne/randomize_va_space로 상태값을 보면 2로 ASLR이 스택, 라이브러리, 힙 모두에 걸려있습니다 vi로 수정하려고 하면 read-only라 수정이 불가능하므로 root 권한으로 실행합니다.
- 0 : 해제
- 1 : 스택 , 라이브러리
- 2 : 스택, 라이브러리, 힙
# DEP / NX
- 레드햇에서 부터 시작된 프로텍트 기법이고, 리눅스 시스템에서 웜의 위험을 줄이고, 자동화된 원격 공격을 막고자 만들었다고 합니다. - https://en.wikipedia.org/wiki/Exec_Shield
- 첫 프로젝트의 결과는 x86 CPU위에 NX bit을 에뮬레이트하는 리눅스 커널의 보안 패치였습니다. 결과적으로 메모리 구조에 덮어쓰거나 코드를 삽입하는 버퍼오버플로우 같은 공격을 막을 수 있습니다.
- Exec-shield에서 빠져나온 프로젝트하나로 PIE(위치 독립 실행 : Position Independent Executables이 있습니다.
- 포맷 스트링 버그와 같은 exploit을 불가능하게 합니다.
- 리눅스 커널의 주소 공간 랜ㅏ덤화 패치 입니다.
- 수정을 할려고보니 일반적으로 echo 0 > /proc/sys/kernel/exec-shield 를 통해서 수정을 하지만 몇몇 운영체제에서는 해당 설정 값이 존재 하지 않을 때(No such file or diretory)가 있습니다. 제가 그랬고 제가 사용한 운영체제는 ubuntu로 커널버전 4.10.0-42에 해당했습니다.
- sysctl -w kernel.exec-shield=0
- echo 0 > /proc/sys/kernel/exec-shield
- 그래서 컴파일 옵션을 주어 컴파일시 실행이 가능하게 하도록 합니다.
- -z execstack
# 컴파일 옵션
- SSP(Stack Smashing protector) 옵션을 이용해 컴파일 할시 스택 카나리가 생성되며, 카나리 값을 덮어버리게 되면 프로그램이 종료됩니다.
- STACK GUARD (SSP) 해제 : -fno-stack-protector
- dummy 값 고정 : -mpreferred-stack-boundary=2
- fno-builtin : stlib와 링크되지않고 단독으로 링크
- 전체적인 컴파일 옵션 : -fno-stack-protector -z execstack -mpreferred-stack-boundary=2 -fno-builtin
# ASCII-Armor
- 주소값에 널바이트가 삽입되어 라이브러리를 호출하는 BOF 공격시 이 주소로 접근할 수 없게 하는 방어기법입니다. 따로 수정하는 값이 없고 우회해야합니다.
# 추가적인 Security
- modules_disabled : linux상에서 module이 전역적으로 로드되는 것을 막음.
- 0 : off
- 1 : on
- kexec_load_disabled : 커널공간의 실행을 막음.
- 0 : false 안막음.
- 1 : true 막음.
반응형
'System > Linux' 카테고리의 다른 글
System/Linux/Angr 정리 (0) | 2018.02.21 |
---|---|
System/Linux/GNU Binutils 정리 (0) | 2018.01.17 |
System/Linux/'/proc'가 가상 파일 시스템이라는 것의 확인 (0) | 2018.01.16 |
Linux/Virtual Environment/Docker/도커 환경에서 ASLR 해제/read-only file system error SOLVED (0) | 2018.01.16 |
Linux/Virtual Environment/Docker/Root계정으로 시작하기 (0) | 2018.01.15 |