https://www.kisa.or.kr/public/laws/laws3.jsp
구현 단계 시큐어코딩 가이드 - 입력 데이터 검증 및 표현 - 운영체제 명령어 삽입
가. 개요
- 적절한 검증절차를 거치지 않은 사용자 입력값이 운영체제 명령어의 일부 또는 전부로 구성되어 실행되는 경우, 의도하지 않은 시스템 명령어가 실행되어 부적절하게 권한이 변경되거나 시스템 동작 및 운영에 악영향을 미칠 수 있다.
- 일반적으로 명령어 라인의 파라미터나 스트림 입력 등 외부 입력을 사용하여 시스템 명령어를 생성 하는 프로그램이 많이 있다. 하지만 이러한 경우 외부 입력 문자열은 신뢰할 수 없기 때문에 적절한 처리를 해주지 않으면, 공격자가 원하는 명령어 실행이 가능하게 된다.
나. 보안대책
- 웹 인터페이스를 통해 서버 내부로 시스템 명령어를 전달시키지 않도록 응용프로그램을 구성하고, 외부에서 전달되는 값을 검증 없이 시스템 내부 명령어로 사용하지 않는다.
- 외부 입력에 따라 명령어 를 생성하거나 선택이 필요한 경우에는 명령어 생성에 필요한 값 들을 미리 지정해 놓고 외부 입력에 따라 선택하여 사용한다.
다. 코드예제
JAVA
다음의 예제는 Runtime.getRuntime().exec()명령어를 통해 프로그램을 실행하며, 외부에서 전달되는 인자 값은 명령어의 생성에 사용된다. 그러나 해당 프로그램에서 실행할 프로그램을 제한하지 않고 있기 때문에 외부의 공격자는 가능한 모든 프로그램을 실행시킬 수 있다.
다음의 예제와 같이 미리 정의된 파라미터의 배열을 만들어 놓고, 외부의 입력에 따라 적절한 파라 미터를 선택하도록 하여, 외부의 부적절한 입력이 명령어로 사용될 가능성을 배제하여야 한다.
아래 코드는 외부 입력값을 검증하지 않고 그대로 명령어로 실행하기 때문에 공격자의 입력에 따라 의도하지 않은 명령어가 실행될 수 있다.
운영체제 명령어 실행 시에는 아래와 같이 외부에서 들어오는 값에 의하여 멀티라인을 지원하는 특수 문자(| ; & :)나 파일 리다이렉트 특수문자(> >>)등을 제거하여 원하지 않은 운영체제 명령어가 실행될 수 없도록 필터링을 수행한다.
C#
다음 C# 코드는 외부 입력값을 프로세스가 실행할 파일 이름에 직접 사용하고 있다. 이는 공격자의 입력에 따라 의도하지 않은 명령어가 실행될 수 있다.
적절한 정규식이나, white list 등을 이용하여 검증을 한 후 사용하도록 한다.
C
공격자의 입력에 따라 의도하지 않은 명령어가 실행될 수 있다.
운영체제 명령어 실행 시에는 아래와 같이 외부에서 들어오는 값에 의하여 멀티라인을 지원하는 특수 문자(| ; & :)나 파일 리다이렉트 특수문자(> >>)등을 제거하여 원하지 않은 운영체제 명령어가 실행 될 수 없도록 필터링을 수행한다.
참고자료
- CWE-78 OS Command Injection, MITRE,
http://cwe.mitre.org/data/definitions/78.html - Sanitize untrusted data passed to the Runtime.exec() method, CERT,
http://www.securecoding.cert.org/confluence/display/java/IDS07-J.+Sanitize+untrusted+data+passed+to+the+Runtime.exec()+method?focusedCommentId=6465 1588#comment-64651588 - Do not call system(), CERT,
http://www.securecoding.cert.org/confluence/pages/viewpage.action?pageId=2130132 - Reviewing Code for OS Injection, OWASP
https://www.owasp.org/index.php/Reviewing_Code_for_OS_Injection
'공부 > KISA' 카테고리의 다른 글
신뢰되지 않는 URL 주소로 자동접속 연결 - KISA 소프트웨어 개발 보안 가이드 (0) | 2020.07.20 |
---|---|
위험한 형식 파일 업로드 - KISA 소프트웨어 개발 보안 가이드 (0) | 2020.07.19 |
크로스사이트 스크립트 - KISA 소프트웨어 개발 보안 가이드 (0) | 2020.07.18 |
경로 조작 및 자원 삽입 - KISA 소프트웨어 개발 보안 가이드 (0) | 2020.07.18 |
SQL 삽입 - KISA 소프트웨어 개발 보안 가이드 (0) | 2020.07.17 |
댓글