본문 바로가기
[보안 Archive] ~2017/<인터넷 해킹과 보안> 정리

소스코드 취약점 분석, 소스코드 취약점 유형

by Joy L. 2020. 3. 28.
반응형

01 소스코드 취약점 분석

 

보안 취약점을 찾는 2가지 방법;

  1. Black Box Testing
    웹 어플리케이션의 소스코드를 보지 않고, 어플리케이션의 외부 인터페이스 구조를 분석하여 취약점을 발견하는 방식
    장점 : White box testing 보다 취약점을 찾는 속도가 빠르고 다양한 취약점 공격을 시도할 있다. 또한 인터페이스 간의 상관관계 분석을 통해 취약점이 발생 있는 부분을 식별할 있다.
  2. White Box Testing
    개발된 소스코드를 살펴봄으로 코드 상의 취약점을 찾는 방식
    장점 : 소스코드를 볼 수 있기 때문에 보안 취약점의 존재 유무를 확실히 있다. 하지만 소스코드를 일일이 검토하면 시간이 많이 소요된다.

 

Gray Box Testing - Black Box Testing과 White Box Testing의 장점을 혼합한 방식. 외부에서 보이는 웹 어플리케이션의 취약점을 웹 어플리케이션 보안 진단을 통해 통해 확인하고, 소스코드에서 접근통제, 입력값 검증, 등을 살며보면서 취약점을 조사하는 방법이다.

 

 

02 소스코드 취약점 유형

 

소스코드에서 발생하는 취약점의 문제를 해결하기 위해 행안부(행정안전부)에서 소프트웨어 개발 보안 가이드를 배포했다. 내용을 보면 OWASP Top10 웹 어플리케이션 취약점과 유사한 구조를 가지고 있다. 7가지 항목이 있는데 이 중 ‘입력 값 검증 취약점’과 ‘세션 처리 및 접근 통제 취약점’, ‘코드 내 중요 정보 노출 취약점’에 대해 알아보겠다.

 

 

1. 입력 값 검증 취약점

 

입력 값 검증 취약점의 대표적인 예로는 SQL injection, XSS, Malicious file upload, 디렉터리 경로 조작 등이 있다.

(WebGoat의 경우 해당 기능들의 java 파일을 확인해본다)

 

SQL injection 경우 사용자가 입력한 값이 아무런 필터링 없이 그대로 데이터베이스 쿼리문에 들어가기 때문에 사용자는 특수문자들을 사용해서 원하는 공격 쿼리문을 만들 있다.

SQL injection 취약점을 검증하기 위해 소스코드 분석할때 SELECT문과 같은 데이터베이스 쿼리문을 검색하고 쿼리문에서 사용자의 입력값을 받는 부분에 필터링 규칙이 있는지 확인해야한다.

 

XSS 취약점 경우에도 사용자의 입력값을 받고 필터링 없이 입력값을 처리한다.

 

Malicious file upload 취약점 경우 업로드 있는 파일의 확장자에 대한 필터링을 하지 않아서 일어난다. 파일의 확장자에 대한 필터링이 없으면 공격자는 asp jsp등의 프로그래밍 파일을 업로드해서 악성 스크립트를 실행할 있다. 따라서 파일을 업로드 하는 부분에서 파일 확장자를 검사해야한다.

 

디렉터리 경로 조작 파일 업로드와 비슷하게 파일명을 받아드리는 부분에서 파일명에 대한 필터링이 없어서 디렉터리 경로를 조작해서 상위 디렉터리에 있는 임의의 파일을 접근할 있는 취약점이다.

 

 

2. 세션 처리 및 접근 통제 취약점

 

개발 단계에서 사용자의 권한에 대한 검증을 적절하게 수행하지 않으면 발생한다.

 

parameter/cookie 조작

URL의 변수 혹은 POST 형태로 전송되는 파라미터 값을 조작하여 자신이 소유한 권한 외의 권한을 획득하는 공격 기법이다. 이 취약점이 존재하는지 확인하기 위해 사용자 권한을 요구하는 페이지에 접근할때 세션 처리를 하는 코드를 포함하는지 봐야한다.

 

Forceful browsing(강제 브라우징)

강제 브라우징 취약점은 권한이 필요한 페이지에 권한 체크 코드가 누락된 경우에 발생한다.

eg. 관리가 페이지에서 세션 검사를 하지 않는 상황

 

 

3. 코드 내 중요 정보 노출(평문 전송) 취약점

 

중요한 정보가 암호화되지 않은 상태로 전송되어서 스니핑과 같은 공격을 통해 탈취되는 취약점.

 

중요정보 평문 전송

민감한 정보가 암호화되지 않고 평문으로 전송될 때 발생하는 취약점.

이 취약점을 확인하는 방법 2가지:

  • 중요한 정보를 전송하는 페이지가 HTTPS(SSL)와 같이 암호화된 채널로 통신하는지 확인
  • 소스코드 내에서 중요한 정보를 암호화 함수를 통해 전송하는지 확인

암호화 할떄에는 쉽게 복호화 되지 않는 방법으로 암호화하는것이 중요하다.

 

하드 코딩된 패스워드

하드코딩: 패스워드와 같은 민감한 정보가 소스코드에 그대로 노출되어 있는 경우.

 

주석 처리된 중요 정보

주석에 중요 정보가 포한되어 있는 경우.

 

반응형

댓글