티스토리 뷰
가. 원인
- 외부입력값을 검증하지 않고 운영체제 명령문의 일부 또는 전체로 구성되어 실행
나. 영향
- 공격자가 입력한 명령어가 웹서버 권한으로 실행
- 시스템 중요파일 삭제
- 백도어 실행
- 부적절한 권한변경
다. 보안대책
- 어플리케이션에서 운영체제 명령어를 실행하지 않도록 설계
- 미리 정의되어 있는 허용목록을 검색하여 명령어가 실행되도록 설계
라. 안전한 코드
1. 허용하는 명령어 목록 사용
List<String> allowedCommands = new ArrayList<String>(); allowedCommands.add("notepad"); allowedCommands.add("calc");
String cmd = args[0]; if ( allowedCommands.contains(cmd) ) { Runtime.getRuntime().exec( cmd ); ... }
|
String[] allowedCommands = { "type", "dir" }; int index = Integer.parseInt( request.getParameter("index") ); if ( index >= 0 && index < allowedCommands.length ) { cmd = new String[] { "cmd.exe", "/c", allowedCommands[index] }; Runtime.getRuntime().exec(cmd); ... }
|
2. 멀티 명령어 필터링
String data = request.getParameter("data"); data = data.replaceAll("|", "").replaceAll(";", "").replaceAll("&", ""); data = data.replaceAll(":", "").replaceAll(">", "");
String command = new String ("cmd.exe /c backupload.bat" + data); Runtime.getRuntime().exec( command );
|
마. 진단방법
<운영체제 명령어 삽입>
1. 운영체제 명령어를 실행할 수 있는 함수( exec(), system(), getRuntime() 등 )가 호출되는지 확인
2. 외부 입력값이 시스템명령의 일부 또는 전체로 사용하는지 확인
3. 명령어가 화이트리스트로 사용되는지 확인
4. 멀티 명렁어를 위한 특수기호를 필터링하는지 확인
바. 정/오탐 케이스
<정탐 케이스>
1. 검증없이 외부 입력값을 사용하여 문자열을 만들고, 명령어로 사용
2. 개별 사용 프로퍼티를 사용하여 검증없이 명령문 실행에 사용
<오탐 케이스>
1. 시스템 프로퍼티를 사용하는 경우
2. 외부 입력값이 운영체제 명령어를 실행하는데 사용되지 않을 경우
3. 파일명을 명령어에 삽입 시 공격에 필요한 특수기호가 없으므로 안전한 것으로 판단
'Web Analytics > SW 보안약점 진단원' 카테고리의 다른 글
[구현보안] 입력 데이터 검증 및 표현 06 - 신뢰되지 않는 URL주소로 자동 접속 연결 (0) | 2019.09.30 |
---|---|
[구현보안] 입력 데이터 검증 및 표현 05 - 위험한 형식 파일 업로드 (0) | 2019.09.30 |
[구현보안] 입력 데이터 검증 및 표현 03 - 크로스 사이트 스크립트 (0) | 2019.09.30 |
[구현보안] 입력 데이터 검증 및 표현 02 - 경로 조작 및 자원 삽입 (0) | 2019.09.30 |
[구현보안] 입력 데이터 검증 및 표현 01 - SQL 삽입 (0) | 2019.09.30 |
- Total
- Today
- Yesterday