50. OS 커맨드 인젝션 - 보안의 기본 |
* OS 커맨드 인젝션이란?
-
OS 커맨드 인젝션은 SQL 인젝션과 마찬가지로 인젝션 공격의 일종이다.
인젝션 공격은 앱에 대한 데이터 입력을 악용하여 앱이 호출하는 외부 시스템을 의도하지 않은 형태로 조작하는 공격이다.
SQL 인젝션의 경우 공격 대상이 DB 였지만, OS 커맨드 인젝션의 경우는 공격대상이 OS 쉘이 된다.
-
쉘은 OS의 커맨드를 실행하는 환경이다.
쉘을 부정으로 조작할 수 있다는 것은 OS 가 실행할 수 있는 다양한 일, 예를 들면 파일의 참조, 편집, 삭제, 임의의 프로그램 실행 등이 공격자에 의해 가능해 진다는 것이다.
* OS 커맨드 인젝션의 실행 방법과 대책
-
OS 커맨드 인젝션은 OS 의 쉘을 호출할 수 있는 프로그래밍 언어(Perl 이나 PHP 등)를 사용하여 앱을 구축하고 있는 경우에 일어난다.
프로그래머는 쉘을 사용하여 어떤 정해진 OS 커맨드를 호출할 때 그 파라미터로서 데이터를 추가로 전달하는데, 파라미터를 전달하는 방법이 SQL 인젝션과 마찬가지로 문자열을 연결하기만 한 것으로 수행되기 때문에 공격자가 파라미터를 포함한 커맨드 줄 전체를 의도하지 않은 형태로 바꿔 버리는 조작이 가능해진다.
-
OS 커맨드 인젝션의 대책으로는 앱에 의해 입력된 데이터를 신뢰하지 말고 OS 커맨드 호출에 영향을 줄 것 같은 문자열을 다른 무해한 문자열로 변환하는 방법(새니타이즈 또는 이스케이프라 부름)이 있다.
* 악용되는 OS 커맨드의 기능
-
리다이렉트, 파이프, 커맨드 연결 등과 같은 기능이 악용된다.
-
리다이렉트 : 커맨드의 결과를 파일로 출력하거나 파일의 내용을 커맨드에 입력할 수 있다. > 나 < 를 이용한다.
ex) OS_command XXXX < file A
-
파이프 : 커맨드의 결과를 다른 커맨드에 입력할 수 있다. | 를 사용한다.
ex) OS_command XXXX | other_command
-
커맨드 연결 : 한 줄의 커맨드 줄에서 여러 개의 커맨드를 연결하여 실행할 수 있다.
Windows 에서는 &, Linux 나 Mac OS 에서는 ; 를 사용한다.
ex) OS_command & other_command
'프로그래밍 놀이터 > 보안' 카테고리의 다른 글
[도서 정리] 52. 크로스 사이트 리퀘스트 포저리(CSRF) - 보안의 기본 (0) | 2019.12.01 |
---|---|
[도서 정리] 51. 크로스 사이트 스크립팅(XSS) - 보안의 기본 (0) | 2019.11.30 |
[도서 정리] 49. SQL 인젝션 - 보안의 기본 (0) | 2019.11.28 |
[도서 정리] 48. 버퍼 오버플로 - 보안의 기본 (0) | 2019.11.27 |
[도서 정리] 47. 중간자 공격 - 보안의 기본 (0) | 2019.11.26 |
댓글