1. Bash Shell Shock(CVE-2014-6271)

- 리눅스 계열 OS에서 주로 사용하는 GNU Bash에 공격자가 원격에서 악의적인 시스템 명령을 내릴 수 있는 취약점

- 환경변수를 통해 공격자가 원격으로 명령을 실행할 수 있음.

- 현재는 보안패치를 통해 취약점이 제거된 상태

[캡쳐 1] NVD CVE-2014-6271

2. 취약점 분석

2.1) 영향받는 bash 버전

Bash-4.2.45.5.el7_0.2
bash-4.1.2-15.el6_5.1
bash-4.1.2-15.el6_5.1.sjis.1
bash-4.1.2-9.el6_2.1
bash-4.1.2-15.el6_4.1
bash-3.2-33.el5.1
bash-3.2-33.el5_11.1.sjis.1
bash-3.2-24.el5_6.1
bash-3.2-32.el5_9.1
bash-3.2-32.el5_9.2
bash-3.0-27.el4.2

2.2) CGI (Common Gateway Interface)

- CGI란 웹서버와 외부 프로그램 사이에서 정보를 주고받는 방법이나 규약을 뜻함.

- 웹 서버와 사용자 프로그램 사이에서 정보를 주고받는  프로그램.

- 서버에 cgi-bin 폴더를 만든 후 내부에 스크립트 파일을 생성, 웹 서버가 CGI를 통해 cgi-bin에 접속 및 파일 실행 후 결과를 클라이언트에 응답.

- 현재는 서버단 스크립트 언어(Server-side Script Language : ASP, JSP, PHP 등)가 활성화되면서 많이 사용되지는 않음.

[캡쳐 2] CGI (https://velog.io/@seanlion/cgi)

- 모든 bash shell이 취약점에 노출되어있는 것이 아닌, 환경변수를 통해 bash를 호출할 수 있는 프로그램이 시스템에 존재할 경우 취약점에 노출되는 것으로, 대표적인 프로그램으로는 CGI가 있음.

2.3) 환경변수

- "자주 사용하는" 혹은 "필요한 변수들을 미리 선언해 놓은 변수"를 뜻함

- export 명령을 통해 선언하며, env 명령을 통해 선언된 전체 환경변수를 확인할 수 있음.

[캡쳐 3] 환경변수 x 선언 및 확인

- 환경변수로 함수를 선언하는 것 또한 가능하며, 함수는 다음과 같이 선언

[캡쳐 4] 환경변수 함수 선언 및 확인

- 만약, 환경변수의 값을 명령을 포함하여 함수와 비슷한 형태로 선언 후 bash 명령어를 통해 초기화할 경우

- 입력 값에 대한 유효성 검증을 하지않는 버그로 인해 명령어까지 환경변수로 등록되며, 이후 해당 변수 실행 시 해당 명령까지 실행되어 취약점이 발생.

[캡쳐 5] 취약점 발생

3. 공격 실습

 

PentesterLab: Learn Web App Pentesting!

This course details the exploitation of the vulnerability CVE-2014-6271. This vulnerability impacts the Bourne Again Shell "Bash". Bash is not usually available through a web application but can be indirectly exposed through a Common Gateway Interface "CGI

pentesterlab.com

3.1) 피해자 환경

IP : 192.168.56.110
bash 버전 : 4.2.45(1)-releasa (i686-pc-linux-gnu)

[캡쳐 6] 취약한 버전의 bash

3.2) 공격자 환경

IP : 192.168.56.102

[캡쳐 7] /cgi-bin/status

- 웹 브라우저의 개발자 도구를 통해 확인해보면, "/cgi-bin/"의 "status" 스크립트를 실행시켜 결과를 반환함.

[캡쳐 8] /cgi-bin/status 결과

- /cgi-bin/status를 이용하는 과정을 악용해 취약점 사용이 가능함.

[캡쳐 9] 리버스쉘

- 공격자는 리버스쉘 연결을 위해 9999포트를 오픈한 후 조작된 요청을 전송함.

[캡쳐 10] 조작된 요청 전송

- 조작된 요청을 전송한 결과 공격자는 쉘을 획득하며 추가적인 명령을 수행할 수 있음.

[캡쳐 11] 공격자의 쉘 획득

- 뿐만아니라 공격자는 임의의 명령을 수행할 수 있음.

[캡쳐 12] ping 명령 및 /etc/passwd 내용 노출

- 와이어샤크를 통해 패킷을 확인해보면 다음과 같음.

[캡쳐 13] 200 응답값 확인

4. 대응방안

- 취약점이 패치된 bash 업데이트 적용.

- 사용하지 않는 CGI 서비스 삭제 또는 관련 서비스 중지

- 패킷을 분석하여 공격 패턴(ex. "() {" 등)을 등록하여 탐지 및 차단

 

참고

 

KISA 한국인터넷진흥원

□ FOCUS  ○ GNU Bash 원격코드실행 취약점 이슈 분석 및 대응방안 4

www.kisa.or.kr

[캡쳐 1] https://owasp.org/Top10/A04_2021-Insecure_Design/

안전하지 않은 설계(Insecure Design)는 2021에 새로 추가된 항목이다. 이는 초기 기획 및 설계 단계에서 보안이 제대로 고려되지 않아 발생하는 보안 결함을 뜻한다. 즉, 누락되거나 비효율적인 제어 설계로 표현되는 다양한 취약점을 나타내는 카테고리이다. 안전하지 않게 설계된 애플리케이션은 개발 완료 후 코드를 수정하여도 보안 결함을 완벽히 방어하는데 한계가 있다. 따라서, 설계 단계에서부터 보안을 적절히 고려해야 할 필요가 있다.
 
안전한 보안 설계를 위해서는 보안 설계, 보안 개발 수명 주기, 위협 모델링 등이 필요하다.

 

[캡쳐 2] 소프트웨어 개발보안 방법론 (출처 : 행정안전부)

 

[캡쳐 1] https://owasp.org/Top10/A03_2021-Injection/

인젝션(Injection)이란 정상적이지 않은 혹은 조작된 입력값을 삽입하여 인터프리터나 SQL 해석 등에서 처리되도록 하여 정보를 탈취하거나 임의의 명령을 실행하려는 시도를 말한다. 웹 어플리케이션과 관련된 취약점 유형 중 가장 많이 공격에 이용되는 유형이다.

OWASP TOP 10 2017에서는 A01으로 소개되었으며, 2021에서는 Cross-Site Scripting(XSS)이 포함되어 A03으로 소개되었다. XSS가 포함됨으로써, OWASP TOP 10 2021에서는 입력값 조작을 통한 공격이 Injection으로 통일되었다.

대응책으로는, 시큐어 코딩을 통해 사용자 입력값을 적절히 필터링하거나 검증하는 절차를 거쳐야한다. 혹은, 사용자가 허용된 입력값만을 사용할 수 있도록 화이트리스트 기반 서버측 검증을 수행한다. 알려진 취약점 등의 시그니처를 보안 솔루션에 등록하여 공격 시도를 탐지하고, 차단하여야 한다. 또한, DB나 Web 로그를 통해 관련된 공격 시도의 유무를 확인할 수 있다.

취약점 유형

SQL Injection, NoSQL Injection
OS command
Object Relational Mapping (ORM) Injection
LDAP Injection
Expression Language (EL) Injection
Object Graph Navigation Library (OGNL) injection


공격 시나리오

[캡쳐 2] SQL Injection에 취약한 소스코드

[캡쳐 2]는 SQL Injection에 취약한 소스코드이며, 사용자가 입력한 id 값을 적절한 검증 없이 user_id 값으로 설정한 후 SQL 쿼리문 완성 및 execute() 함수를 통해 실행시키는 것을 볼 수 있다.

[캡쳐 3] SQL Injection

[캡쳐 3] 처럼 값을 준 후 Submit을 클릭할 경우, [캡쳐 2]에 의해 query 변수는 하기와 같이 완성된다. 피연사자 중 하나라도 참인 경우 결과값으로 참을 반환하는 or 연산의 특징으로 인해, user_id=''이 거짓이라도 '1'='1'이 참이므로 해당 쿼리문은 정상적으로 수행된다.

SELECT first_name, last_name FROM users WHERE user_id = '' or '1'='1';

 

[캡쳐 4] 쿼리 수행 결과

[캡쳐 4]를 통해 공격자는 ' or '1'='1 이라는 조작된 값을 입력하였지만, 정상적으로 쿼리가 수행된 것을 알 수 있다. 또한, 공격자는 users 테이블의 first_name, last_name 칼럼 정보를 확인할 수 있다.

대응방안

사용자 입력 값 검증 (시큐어 코딩, 화이트리스트 기반 서버측 검증)
특수문자 이스케이프 (사용자 입력값이 SQL 쿼리문이나 명령의 일부로 인식되지 않도록)
알려진 Injection 취약점 또는 공격에 사용되는 명령어 등의 시그니처 보안 솔루션 등록 후 탐지 및 차단

제20조(정보주체 이외로부터 수집한 개인정보의 수집 출처 등 고지) 

① 개인정보처리자가 정보주체 이외로부터 수집한 개인정보를 처리하는 때에는 정보주체의 요구가 있으면 즉시 다음 각 호의 모든 사항을 정보주체에게 알려야 한다.

1. 개인정보의 수집 출처
2. 개인정보의 처리 목적
3. 제37조에 따른 개인정보 처리의 정지를 요구할 권리가 있다는 사실

② 제1항에도 불구하고 처리하는 개인정보의 종류ㆍ규모, 종업원 수 및 매출액 규모 등을 고려하여 대통령령으로 정하는 기준에 해당하는 개인정보처리자가 제17조제1항제1호에 따라 정보주체 이외로부터 개인정보를 수집하여 처리하는 때에는 제1항 각 호의 모든 사항을 정보주체에게 알려야 한다. 다만, 개인정보처리자가 수집한 정보에 연락처 등 정보주체에게 알릴 수 있는 개인정보가 포함되지 아니한 경우에는 그러하지 아니하다. <신설 2016. 3. 29.>

③ 제2항 본문에 따라 알리는 경우 정보주체에게 알리는 시기ㆍ방법 및 절차 등 필요한 사항은 대통령령으로 정한다. <신설 2016. 3. 29.>

④ 제1항과 제2항 본문은 다음 각 호의 어느 하나에 해당하는 경우에는 적용하지 아니한다. 다만, 이 법에 따른 정보주체의 권리보다 명백히 우선하는 경우에 한한다. <개정 2016. 3. 29.>
1. 고지를 요구하는 대상이 되는 개인정보가 제32조제2항 각 호의 어느 하나에 해당하는 개인정보파일에 포함되어 있는 경우
2. 고지로 인하여 다른 사람의 생명ㆍ신체를 해할 우려가 있거나 다른 사람의 재산과 그 밖의 이익을 부당하게 침해할 우려가 있는 경우

제19조(개인정보를 제공받은 자의 이용ㆍ제공 제한)
개인정보처리자로부터 개인정보를 제공받은 자는 다음 각 호의 어느 하나에 해당하는 경우를 제외하고는 개인정보를 제공받은 목적 외의 용도로 이용하거나 이를 제3자에게 제공하여서는 아니 된다.
1. 정보주체로부터 별도의 동의를 받은 경우
2. 다른 법률에 특별한 규정이 있는 경우

[캡쳐 1] https://owasp.org/Top10/A02_2021-Cryptographic_Failures/

암호화(Crypto)란 알고리즘을 이용해 평문 데이터를 인증 키를 가진 사람만이 볼 수 없도록 암호문으로 변환하는 것이다. 즉, 전송하고, 수신하고, 저장하는 정보를 다른 사람이 해독할 수 없도록 하는 것이다. 암호화가 적절히 수행되지 않거나 미수행된 경우 외부의 사용자에게 중요하거나 민감한 데이터가 노출될 수 있다.

OWASP TOP 10 2017에서는 A03 민감한 데이터 노출(Sensitive Data Exposure)로 소개되었으며, 2021에서는 한단계 상승한 A02로 선정되었다.

대응책으로는, 최신 버전의 암호 프로토콜 및 암호 알고리즘을 사용하며, 암호화 키를 고정된 길이 또는 재사용 하지 않도록 한다. 금융 정보와 개인정보의 경우 법과 규정에 따라 안전히 보호하기 위한 추가조치를 수행해야 한다. 국내에 관련된 규정으로는 개인정보보호법, 정보통신망법, 신용정보법, ISMS-P 인증, ISO 27001 인증 등이 있다.

 

취약점 유형

데이터가 평문 전송되는 경우(HTTP, FTP, TELNET 등)
취약한 암호 프로토콜을 사용하는 경우(SSL v2.0, SSL v3.0, TLS v1.0, TLS v1.1)
취약한 암호 알고리즘을 사용하는 경우(DES, RC4, MD5 등)
고정된 암호 키나 암호키를 재사용하는 경우(Salt와 같은 일회용 난수 미사용)
미흡한 암호화 키 관리(하드코딩 등)

 

공격 시나리오

[캡쳐 2] bwapp 민감 정보 노출

공격자가 네트워크를 스니핑하고 있는 상태에서 중요 정보(계정정보, 세션ID 등)가 포함된 데이터를 평문 전송하는 경우, 공격자는 평문으로 노출된 중요 정보를 통해 해당 시스템에 로그인할 수 있다.

 

대응방안

레거시 프로토콜 미사용
최신 버전의 암호 프로토콜, 알고리즘 사용
보안 헤더 설정을 통한 HSTS(HTTP Strict Transport Security_HTTP를 HTTPS로 강제 리다이렉트) 설정
의사 난수 생성기 등을 통해 일회용 난수를 생성해 암호키 또는 암호문 생성시에 적용
신뢰할 수 있는 기관에서 발행한 인증서 사용

1. DML (Data Manipulation Language)

- 데이터 조작어

- 데이터의 삽입, 수정, 삭제, 조회 등을 수행

- INSERT(데이터 생성),  UPDATE(데이터 수정), DELETE(데이터 삭제), SELECT(데이터 조회)

2. INSERT

- 테이블에 데이터를 입력할 경우 사용

- 입력할 데이터는 반드시 컬럼의 순서와 개수가 일치해야 함

INSERT INTO 테이블명 VALUES (컬럼=값);

[캡쳐 1] INSERT INTO ~ VALUES ~ 결과

2.1) 특정 컬럼 INSERT

- 특정 컬럼을 지정해 데이터를 입력할 경우

- 컬럼명입력한 데이터의 순서와 개수가 일치해야 함

INSERT INTO 테이블명(컬럼1, 컬럼2, 컬럼3,......) VALUES(컬럼1의 값, 컬럼2의 값,....);

[캡쳐 2] 특정 컬럼을 지정하여 데이터 입력

2.2) 특정 컬럼 SET

- 특정 컬럼을 지정해 데이터

INSERT INTO 테이블명 SET
컬럼명1=데이터1, 컬럼명2=데이터2...;

[캡쳐 3] SET을 이용한 데이터 입력

3. SELECT

- 테이블 내 데이터를 조회할 때 사용

- 테이블에 저장된 칼럼 순서대로 조회

SELECT [ALL | DISTINCT] 속성이름 FROM 테이블이름
[WHERE 조건]
[GROUP BY 속성이름]
[HAVING 검색조건]
[ORDER BY 속성이름 [ ASC | DESC]

[캡쳐4] SELECT 수행 결과

- 각 절에 다양한 조건을 줌으로써 목적에 맞는 데이터를 조회할 수 있음

[캡쳐 5] USER 테이블에서 name이 A인 사람의 studentID 조회

4. UPDATE

- 테이블 내 데이터를 변경할 때 사용

UPDATE 테이블명 SET 변경할 컬럼=변경할 데이터 WHERE 변경하고자하는 조건

[ 캡쳐 6] UPDATE 수행 결과

5.DELETE

- 테이블내 저장된 데이터를 삭제할 때 사용

DELETE FROM 테이블명 WHERE 삭제할 컬럼명=조건;

[캡쳐 7] DELETE 수행 결과

'데이터베이스 > SQL 문법' 카테고리의 다른 글

SQL_DCL(Data Control Language)  (0) 2022.09.13
SQL_DDL(Data Definition Language)  (0) 2022.09.01

[캡쳐 1] https://owasp.org/Top10/A01_2021-Broken_Access_Control/

접근 제어(Access Control)란 사용자에게 허용 또는 거부의 권한을 부여하여 사용자가 주어진 권한을 벗어나 행동하는 것을 막는 것이다. 접근 제어가 취약하게 구현되어 있을 경우 사용자는 주어진 권한을 벗어나 허용되지 않은 데이터나 자원에 접근하여, 조회, 삭제, 갱신 등을 할 수 있게 된다.

 

OWASP TOP 10 2017에서는 A05로 확인되나 2021에서는 4단계 상승한 A01로 선정되었다. 그만큼 공격자들이 관련된 취약점을 이용한다는 것으로 판단된다. 또한, 과거에 비해 다수의 서비스를 제공하고, 페이지 수정 및 추가 등으로 인한 접근통제의 어려운 문제도 영향을 주었을 것으로 판단된다.

 

적절한 대응 책으로는, 초기 계획 단계부터 접근 권한과 관련된 계획을 세워야 할 필요가 있다. 설계 및 구현 단계에 적용해, 테스트 단계에서 검증을 수행하는 것이다. 그리고, 서비스 및 페이지가 추가되거나 변경될 경우 접근 권한이 누락 없이 적절히 적용되도록 해야 한다. 또한, 접근 권한의 적정성에 대해 주기적인 검토가 필요하다.  추가적으로 기본적으로 모든 접근에 대해 차단 정책을 적용하고, 접근이 가능한 대상을 지정하는 화이트리스트 기반 정책을 수립한다.

 

취약점 유형

일부 사용자(ex. 관리자)에게만 부여되어야 하는 권한을 모든 사용자들에게 부여할 경우
URL 파라미터, 쿠키 값 등을 변조하여 인증이 필요한 페이지에 접근하거나 타 사용자의 권한을 사용할 수 있는 경우
사용자 권한으로 로그인 후 관리자 권한으로 권한으로 상승하거나 활동할 수 있는 경우
DELET, PUT 등의 API 요청에 대한 접근제어가 누락된 경우
API 서버의 보안 설정 미흡

 

대응방안

계획 단계부터 적절한 접근권한 계획 수립 및 적용
서비스, 페이지의 생성, 변경 등에 따른 접근권한이 누락없이 적용되도록 관리
접근권한 적정성 검토
기본적으로 모든 접근을 차단하고, 접근이 가능한 대상을 지정(화이트리스트 기반)

 

공격 시나리오

 

bWAPP Directory Traversal(Files)

1. Directory Traversal이란? - 상위 디렉터리로 이동가능한 문자 ../ 를 이용해 상위 디렉터리로 접근하여 파일을 검색/다운 등이 가능한 취약점. - 접근 통제 및 검증, 서버 설정 미흡 등의 취약점으로

ggonmerr.tistory.com

 

참고

 

A01 Broken Access Control - OWASP Top 10:2021

A01:2021 – Broken Access Control Factors CWEs Mapped Max Incidence Rate Avg Incidence Rate Avg Weighted Exploit Avg Weighted Impact Max Coverage Avg Coverage Total Occurrences Total CVEs 34 55.97% 3.81% 6.92 5.93 94.55% 47.72% 318,487 19,013 Overview Mov

owasp.org

 

+ Recent posts