본문 바로가기
SK shieldus Rookies 16기

[SK shieldus Rookies 16기] 클라우드 기반 스마트 융합 보안 과정 교육 정리(39일차)

by Challenge programmers 2023. 12. 18.

오늘 학습 주제

1. Command Injection

2. XSS

 

 

 

 

 

Command Injection


- 운영체제 명령어(Shell Command) -

사용자와 운영 체제 커널 간의 인터페이스 역할을 하는 프로그램의 명령어

 

 

- Command Injection -

어플리케이션에 운영체제 명령어를 실행하는 기능이 존재하는 경우

외부 입력값을 검증, 제한하지 않고 운영체제 명령어 또는 운영체제 명령어의 일부로 사용하는 경우 발생

 

시스템 제어권을 탈취하여 해당 시스템을 공격자 마음대로 제어하게 됨

 

외부 입력값을 검증하지 않고 사용

추가 명령어 실행에 사용되는 &, |, ; 등의 문자열 포함 여부를 확인하지 않고 사용

 

외부 입력값을 제한하지 않고 사용

내부 로직에서 사용할 수 잇는 명령어 또는 명령어의 파라미터 값을 미리 정의하고

정의된 범위 내에서 사용하도록 하지 않은 경우(화이트 리스트 미사용)

 

 - 화이트 리스트 vs 블랙 리스트 -

화이트 리스트(허용 목록)

정의된 목록 범위 내의 값만 사용하도록 제한

새로운 입력 유형에 대해서도 동일한 보안성을 제공하기에 안전

블랙 리스트(제한 목록)

정의된 목록의 값을 사용하지 않도록 제한

특정 집합의 규모가 크고 변화가 심한 경우에 사용

 

 

 - Command Injection 방어 기법 -

#1 불필요한 운영체제 명령어 실행을 제거한다.

운영체제 명령어 실행이 꼭 필요한지 여부를 확인하고 불필요한 경우 해당 기능을 제거하거나 다른 기능을 대체한다. 

운영체제 명령어 실행이 발생하지 않도록 설계한다.

 

#2 운영체제 명령어 또는 운영체제 명령어의 파라미터로 사용될 값을 화이트 리스트 방식으로 제한한다.

시스템 내부에서 사용할 운영체제 명령어 또는 운영체제 명령어의 파라미터로 사용될 값을 미리 정의하고 정의된 범위 내에서 사용되도록 제한한다. 

 

#3 입력값에 추가 명령어 실행에 사용되는 &, |, ; 등의 문자가 포함되어 있는지 검증하고 사용한다.  

 

#4 외부에서 시스템 내부 처리를 유추할 수 없도록 코드화한다.

 

 

 

 - nc(netcat) -

매 공격마다 파이프( | ) 를 이용하여 명령어를 조합하는 것은 번거로우니

netcat을 이용하여 네트워크를 연결하여 공격

공격 대상자는 공격이 이루어지고 있다는 것을 알기가 힘들다

단, 프로세스를 확인하면 가능

 

nc 공격이 이루어지기 위해서는 1. 웹 어플리케이션에 OS Command InJection 취약점이 존재2. 해당 웹 서버에 nc 프로그램이 존재

 

nc 프로그램이 설치되지 않은 웹서버는 서버 관리 목록으로 많이 사용하는 프로그램(telnet 등)을 이용해서 공격 시도

 

 

 - telnet 공격 -

매 공격마다 파이프( | ) 를 이용하여 명령어를 조합하는 것은 번거로우니

 

 

 

 

 

크로스 사이트 스크립트(XSS: Cross-Site Scripting)


- XSS -

공격자가 전달한 스크립트 코드가 사용자 브라우저를 통해서 실행되는 경우

1) 사용자에게 가짜 페이지를 제공하고 입력을 유도하여 사용자 정보를 탈취

2) 사용자 브라우저 또는 PC에 저장된 정보를 탈취

3) 사용자 PC의 제어권 탈취가 가능

 

 

- 저장 XSS(Stored XSS) -

공격자가 입력한 스크립트 코드가 취약한 서버에 저장되고,

사용자가 조회시 저장된 스크립트 코드가 그대로 전달되어 실행

 

한번 저장된 스크립트 코드는 불특정 다수의 사용자에게 지속적으로 전달되어 실행됨

 

예시) 게시판 글 등록과 조회

 

 

 

- 반사 XSS(Reflective XSS) -

입력 값이 다음 화면 출력에 사용되는 경우

입력 값에 스크립트 코드 포함 여부를 확인하지 않고

그대로 화면 출력에 사용하면 입력 값으로 전달된 스크립트 코드가 사용자 브라우저에서 실행

 

 

 

- DOM Based XSS -

개발자가 작성한 스크립트 코드의 취약점을 이용한 공격

어떤 값을 화면에 출력하는 기능을 구현할 때 입력값에 실행 가능한 코드 포함 여부를 확인하지 않고

HTML 태그로 처리하는 경우

 

 

- XSS 대응 방법 -

1) 입력값에 실행 가능한 코드가 포함되어 있는지 확인

a) 오류 처리

b) 제거 후 이용

c) 안전한 문자로 대체해서 사용 →  HTML 인코딩 처리

 

2) 출력값에 의도하지 않은 실행 가능한 코드가 포함되어 있는지 확인

a) 제거 후 출력

b) 안전한 문자로 대체해서 사용 → HTML 인코딩해서 출력

(태그를 단순 텍스트로 변환)

 

3) 필터링, 인코딩 작업을 수행할 때는 검증된 로직, 라이브러리, 프레임워크를 사용해서 구현다양한 입력 패턴이 존재하기 때문에 개인이 수작업으로 방어하는 것은 불가능그렇기에 검증되고 미리 제작된 필터 사용

< 태그를 나타낼 수 있는 방식이 다양하기 때문에(대소문자, 진수 등) 일일이 막기는 불가능

<script>를 표현하기 위한 1,677,721,600,000,000가지의 다양한 방식이 존재

 

 

뷰(사용자에게 보여지는 화면을 만드는 부분)에서 

안전하게 출력되도록 수정