정보보안/정보

[해킹기법과 대응] ③ 웹 애플리케이션 해킹 (Web Application Hacking) 1

Huikyun 2009. 2. 24. 21:07
최근까지 주류를 이루던 해킹은 운영체제나 프로토콜 설계상의 버그, 또는 개발자들의 본래 의도와는 다르게 보안상 심각한 결과가 초래될 있는 취약성들을 이용한 기법들이 대부분이었다. 전문 해커들에 의해 익스플로잇(해킹 코드)이 발표될 때 까지는 해킹 지식이 적은 사람(Script Kiddy)들에 의해 무분별하게 악용될 가능성은 적었지만 일단 발표가 되고 나면 쉽게 악용되어 취약한 시스템을 운영하는 기업이나 기관에 많은 악영향을 미쳐왔다. 그러나 이러한 취약성들은 패치를 적용하고 구성 설정을 변경하거나 외부로부터의 접근을 적절히 통제할 수 있는 보안 솔루션(라우터, 방화벽 등)에 의해 비교적 쉽게 해결이 가능했다.

최근 해킹의 화두는 웹 애플리케이션의 취약성을 이용하는 것이다. 그러한 이유를 위에서 언급된 내용을 토대로 말하자면 요즘 대부분의 기업이나 기관들은 시스템의 패치나 구성설정 변경을 제대로 하고 있지 못하더라도 접근 통제 솔루션을 하나 이상은 갖추고 있어서 외부로부터 유입되는 부적절한 접근으로부터 내부의 시스템을 보호할 수 있는 장치를 마련하고 있다. 그러나 이러한 솔루션이 갖추어져 있더라도 필수 불가결하게 서비스해야 하는 것이 바로 웹 서비스이다. 접근 통제 솔루션은 웹 서비스로 접근하는 패킷을 통제하지 않고 내부로 유입시키기 때문에 만약 통과되는 패킷에 악의적으로 패킷을 조작해서 보낸다면 정상 패킷으로 간주하여 적절한 통제를 하지 못하게 된다.


[그림 1] 최근 해킹 경향(발췌: SPI Dynamics)

이러한 배경을 토대로 이제까지 발표되어 악용되었던 웹 애플리케이션 취약성 유형을 크게 10가지로 나눌 수 있는데 이번 호에는 그 중 3 가지 취약성에 대해 설명하고 간략하게나마 취약성을 예방할 수 있는 방법을 소개하겠다.
좀더 자세한 내용을 원한다면 코코넛 시큐리티 레터 8월호의 참고 자료를 참조하면 된다.

  • 검증되지 않은 파라미터의 허용(Unvalidated Parameters)
  • 부적절한 접근 통제(Broken Access Control)
  • 부적절한 계정과 세션 관리(Broken Account and Session Management)
  • 크로스 사이트 스크립팅 허점(Cross-Site Scripting(XSS) Flaws)
  • 버퍼 오버플로우(Buffer Overflows)
  • 시스템 명령어 삽입 허용(Command Injection Flaws)
  • 잘못된 오류 처리(Error Handling Problems)
  • 안전하지 않은 암호화 메커니즘 사용(Insecure Use of Cryptography)
  • 원격 관리 허점(Remote Administration Flaws)
  • 웹과 애플리케이션 서버의 구성 설정상의 오류(Web and Application Server Misconfiguration)
  • 1. 검증되지 않은 파라미터의 허용(Unvalidated Parameters)

    클라이언트로부터 웹 애플리케이션이 요청을 받았을 때 그 요청이 적절한 값인지 여부를 검증하지 않음으로 인해 백엔드에 존재하는 허가되지 않은 자원에 접근할 수 있는 취약성이다. url, 쿼리 문, HTTP 헤더, 폼 필드, 쿠키, 그리고 숨겨진 필드 등의 웹 요청(HTTP request) 들을 강제로 브라우징 한다거나 명령어 삽입, SQL 문 삽입, 쿠키 위/변조등을 통해서 보안 메커니즘을 우회할 수 있게 된다.

    [예방 방법]

    웹 요청에 대한 잘못된 예외 규칙을 다음과 같이 정하여 소스 코드에서 철저하게 검증을 하는 것이다.

    - 데이터 형식(문자, 정수, 실수 등)
    - 허용되는 문자셋
    - 최소, 최대 허용 길이
    - NULL 값의 허용 여부
    - 파라미터의 허용 여부
    - 허용되는 숫자 범위
    - 정규 표현식 등

    2. 부적절한 접근 통제(Broken Access Control)

    인증되지 않은 사용자가 시스템에 접근하여 중요한 파일 읽거나 권한 없는 기능들을 수행할 수 있는 취약성이다. 예를 들자면 허가되지 않은 사용자가 웹 요청을 통해서 유닉스 시스템의 /etc/passwd 파일을 읽거나 윈도우 시스템의 웹 루트 디렉터리를 읽을 수 있는 등의 경로 유출(Path Traversal)을 허용하는 것이다. 이러한 취약성은 웹 컨텐츠와 기능에 적절한 접근 통제를 하지 못하는 것이 원인이다.

    [예방 방법]

    다음과 같은 접근 통제를 점검한다.
    - 안전하지 않은 ID 점검
    - 절대 경로를 통한 인증 회피 가능 점검
    - Path Traversal 가능 점검
    - 웹 컨텐츠의 퍼미션 점검
    - 클라이언트 측의 케싱 점검

    3. 부적절한 계정과 세션 관리(Broken Account and Session Management)

    계정에 대한 증명(Account Credential)과 세션 토큰이 적절히 보호되지 못함으로 인해 패스워드나 키, 세션 쿠키, 그리고 다른 토큰 등을 악용하여 인증 메커니즘을 무력화 시키거나 다른 사용자의 아이디를 추측할 수 있는 취약성이다. 예를 들자면 사용자의 패스워드 변경, 패스워드 분실, 사용자 정보 수정 등을 포함하는 증명서와 동적 세션 관리가 적절히 개발되지 않아서 다른 사용자에 의해 추측되거나 가로채기를 당하는 것이다.

    [예방방법]

    다음과 같은 항목들에 대해 보안 정책을 강화한다.

    - 패스워드 변경 통제
    - 패스워드 복잡성
    - 패스워드 저장
    - 전송 중인 증명서 보호
    - 세션 아이디 보호
    - 계정 목록
    - 신뢰 관계
    - 백엔드 인증

    출처 : (주)코코넛 시큐레터 7월호