Part 1 : OWASP 2017 TOP 10 RC2 A1 - 인젝션[Injection]

개발/OWASP 2017 2018.01.18 댓글 임통끼
728x90

 

A1 : 인젝션[Injection]

 

 

* 정의

 

SQL, OS, XXE, LDAP 인젝션 취약점은 interpreter(이하 인터프리터)에게 신뢰할 수 없는 데이터가 명령어나 쿼리문의 일부분이 전달될 때 나타납니다. 인터프리터는 공격자의 악의적인 데이터로 인해 예상하지 못하는 명령을 실행하거나 알맞은 권한 없이 데이터에 접근하여 피해를 입을 수 있습니다. 이로 인해서, IP, PW, 개인 정보 등의 유출 가능성이 높아집니다. 이에 대응하기 위해서 사용자 입력 창에 일부 특수문자 입력 차단, SQL 서버 에러 메시지 표시 금지, 일반사용자 권한으로 시스템 저장 프로시저 접근 차단 하는 등의 방안이 있습니다.

 

1-1. SQL Injection (가장 대표적인 것)

SQL Injection은 웹 어플리케이션에서 DB에 Query시 입력된 데이터의 유효성 검증을 하지 않아, 개발자가 의도하지 않은 동적 쿼리(Dynaminc Query)를 생성하여 DB정보를 열람하거나 조작할 수 있는 보안 취약점입니다.

왜 발생하나요? 웹 어플리케이션은 User의 행동(클릭, 입력 등)에 따라 DB에 있는 데이터를 서로 다르게 표시하게 됩니다. 이를 위해 Query는 User가 입력한 데이터를 포함하여 Dynamic하게 변하므로 개발자가 의도하지 않은 정보를 열람할 수 있게 되는 것입니다. 

 

 


 

* 대응방법

1. 웹 방화벽 WAF를 사용해야합니다. 

WAF는 평상시 외에도 문제가 발생해 애플리케이션을 수정하는 그 사이에도 웹사이트를 지켜주는 방화벽입니다.

 

2. 동적 SQL을 사용하지 않는 것입니다. 

동적 SQL은 입력 값을 연결하여 SQL 문장을 완성하는 방식이기 때문에 악의적으로 주입하는 사례가 번번히 일어나고 있기 때문입니다. 또한, 쿼리문의 구조가 외부입력값에 의해 변경되지 않는 API를 사용하도록 시큐어코딩 규칙을 지정해야합니다.. ORM프레임워크를 사용하여 안전한 정적쿼리구조로 SQL문을 수행할 수 있도록 개발환경을 설정 하고, 개발가이드 구현 단계를 통해 정적쿼리문(외부입력값에 의해 쿼리문의 구조가 변경되지 않는) 을 사용하도록 제한합니다.

 

만약, 외부입력값을 이용해 동적으로 SQL 쿼리문을 생성해야 하는 경우, 입력값에 대한 검증을 수행 한 뒤 사용해야 합니다. 클라이언트와 서버 양측에서 입력 값에 대해 안전한 값만 사용될 수 있도록 검증작업을 수행해야 합니다.

 

(ㄱ) 필터를 이용한 입력 값 검증 외부입력값에서 SQL삽입이 가능한 문자열들을 필터링하여 안전한 값으로 치환하도록 하는 Filter 컴포넌트를 생성하고, DB에서 관리하는 데이터를 처리하는 모든 애플리케이션에 일괄 적용한다.

 

(ㄴ) 인터셉트를 이용한 입력값 검증 MVC프레임워크를 사용하는 경우 Interceptor 컴포넌트를 사용하여 입력값에 대한 검증 작업을 수 행한 뒤 요청을 차단하거나 허용하는 정책을 애플리케이션에 일괄 적용 한다.

(ㄷ) 라이브러리 또는 Validator컴포넌트를 이용한 입력값 검증 입력값을 검증하는 Validator 컴포넌트를 공통코드로 생성하고, 모든 개발자가 SQL문에 삽입되는 입력값에 대해 검증작업을 해당 컴포넌트에서 수행하도록 시큐어코딩 규칙을 정의한다.

 

3. 안전한 웹사이트를 설계하고 구현해야 합니다.

 입력 값마다 적절한 검증 절차를 적용하고 위험한 입력 값은 위험하지 않은 값으로 치환하고 입력 값이 허용범위 내에 있는지 등을 검사하는 사전 조치입니다.

 

4. 웹 보안 취약점을 주기적으로 점검해야 합니다.

 아무리 안전하게 설계하고 구현한 웹 사이트에도 보안 문제는 남아 있을 수 있기 때문에 일상적으로 점검하고 진단하는 과정이 꼭 필요합니다.

 

5. 데이터베이스의 에러 메시지를 노출해서는 안됩니다. 

에러 메시지를 통해 중요한 데이터가 노출되는 경우가 많기 때문에 이를 악의적으로 사용하려는 시도가 많습니다. 

 

 

 


 

* 실제 사례

 

[데일리시큐] 어나니머스 공격조직, “한국은행 영문사이트에 SQL인젝션 공격” 주장

 

한국은행 측 “영문사이트에는 어떤 금융정보도 없다…SQL인젝션 공격 특이사항 없어” 2017년 06월 26일 월요일

 

어나니머스 공격조직으로 활동하고 있는 트위터 계정 @Scode404(MINION GHOST)가 26일 오전 8시경 트위터에 “한국은행 영문사이트에 SQL인젝션 공격을 진행했다”고 밝혔다. 이들이 게시한 글을 보면, SQL인젝션 공격을 실행한 웹사이트는 한국은행 영문홈페이지로 확인됐다. 그들은 6일 동안 해당 사이트를 공격했다고 밝히고 있다.

이들의 한국은행 영문 사이트 SQL인젝션 공격에 대해 한국은행 관계자는“이미 이들이 트위터에 올린 내용을 알고 있다. 크고 작은 공격은 항상 발생하고 있지만 SQL인젝션 같은 공격은 보안장비에서 차단하고 있다. 그리고 한국은행 웹사이트 특히 영문 웹사이트는 어떠한 금융정보도 포함돼 있지 않다. 즉 그들이 SQL인젝션 공격으로 DB에서 가져갈 금융정보는 없다. 또한 SQL인젝션 공격과 같은 특이 사항이 보고된 바도 없다”고 밝혔다. 

 

출처 : http://www.dailysecu.com/?mod=news&act=articleView&idxno=21291


 

실제 사례와 대응 방법에는 여러가지가 있지만 공격 시나리오를 만들어 공격을 해보는 것이 가장 좋고,

시큐어 코딩을 해보는 것이 가장 중요한 것 같습니다 '~' 

 

 

그럼 Part 2로 넘어갑니당 ~

 

Part 2 : OWASP 2017 TOP 10 RC2 A2 - 인증 취약점[Broken Authentication]

A2 : 인증 취약점[Broken Authentication] * 정의 인증 및 세션 관리와 관련된 어플리케이션 기능이 종종 잘못 구현되어 공격자에게 취약한 암호, 키 또는 세션 토큰을 제공하여, 다른 사용자의 권한을

b1a423.tistory.com

 

반응형

댓글