InfoSec Guide: 웹 인젝션 (Web Injections)

게시일: 2017-01-23 l 작성자: Trend Micro

웹 인젝션은 사이버 범죄 툴킷의 단골 아이템으로 모든 프로그래머, 개발자 및 정보 보안 (InfoSec) 전문가들의 골칫거리입니다. 특히 사이트 간 스크립팅 및 명령, SQL 및 XML 삽입은 웹사이트 및 웹 기반의 애플리케이션에 대한 다양한 위협 요소로서 실행 방법이 다양합니다. 따라서 웹 인젝션에 대한 방어는 매우 복잡한 일입니다.

개인 및 금융 데이터가 오고 가는 플랫폼을 안전하게 보호하는 것은 기업의 운영과 명성 그리고 이익에 있어 매우 중요한 일입니다. 다음은 정보 보안 전문가들이 겪고 있는 가장 널리 알려진 웹 인젝션 공격의 네 가지 형태입니다.


SQL 주입 (SQL Injection, SQLi)

SQL 주입은 데이터베이스 중심의 소프트웨어를 손상시키는데 사용되며 OWASP (Open Web Application Security Project)에서 웹사이트 및 SQL 데이터베이스를 유출시키기 위해 사용되는 가장 위협적이고 일반적인 기술 중 하나로 간주됩니다. SQLi는 악성 SQL을 명령 또는 쿼리의 일부로서 입력 필드에 삽입하고 사용자 입력이 잘못 필터링 된 경우와 같이 소프트웨어 또는 웹 애플리케이션의 보안 결함을 악용합니다. 예를 들어 공격자는 SQL 쿼리에 대한 인수로 사용될 때 데이터베이스가 실행하는 SQL 명령의 일부로 해석되는 악성 입력값을 사용할 수 있습니다.

성공적인 SQLi 공격은 해커가 대상의 ID를 스푸핑 (Spoof)하고 데이터베이스 서버에 대한 관리자 권한을 얻을 수 있게 합니다. 그런 다음 공격자는 트랜젝션 무효화, 시스템 데이터를 유출, 삭제 및 덮어쓰기를 하고 심지어 액세스할 수 없도록 만들 수 있습니다. 이는 공격자들의 네트워크 침입 방법에 대한 정보를 대가로 기업을 갈취하는 버그포처 (Bug Poachers)나 웹사이트의 내용을 삭제한 후 이를 랜섬웨어 활동으로 위장하는 공격자들이 주로 사용하는 기술입니다. 또한 SQLi는 다양한 웹사이트를 훼손하고 데이터베이스에 저장된 개인 식별 정보, 자격 증명 및 중요한 회사 데이터노출하는데 사용됩니다.


명령 주입 (Command Injection)

SQLi가 대상 데이터베이스 관련 웹 애플리케이션 및 서비스를 공격하는 동안 명령 주입을 통해 공격자는 웹사이트를 실행하는 호스트의 운영 체제 (OS)에 악성 셸 명령을 삽입할 수 있습니다. 예를 들어 애플리케이션이 설치된 디렉토리를 찾은 다음 악성 스크립트를 실행하는 것입니다. 명령 주입 공격은 해커가 취약한 웹 애클리케이션 (예: 애플리케이션에서 양식, HTTP 헤더 및 쿠키에서 사용자 생성 데이터의 악성 내용을 시스템 셸로 릴레이하는 경우)에서 임의의 명령을 실행할 수 있게 합니다. 이러한 종류의 공격은 일반적으로 보안에 취약한 애플리케이션에 대한 권한으로 실행됩니다.

간단히 말해 명령 주입은 악성 입력값이 OS 명령으로 잘못 해석되어 공격자가 파일 또는 웹 서버를 제어할 수 있게 하는 공격입니다. 2014년 Shellshock 공격이 이러한 경우에 해당됩니다: 공격자는 웹 서버의 내용을 수정하고 웹사이트의 소스 코드를 변경하여 데이터를 훔치거나 유출시켰으며, 백도어와 같은 멀웨어를 설치했습니다. 이메일을 보내는 라이브러리는 연락처, 등록 및 이메일 재설정 양식과 같은 웹사이트의 구성 요소와 관련된 취약점이 발견될 때도 헤드라인을 장식하였습니다.


XML External Entity 주입 (XML External Entity Injection, XXE)

이러한 종류의 공격은 일반적으로 SQLi 또는 교차 사이트 스크립팅 (Cross-site Scripting)으로 사용되지만, XXE는 최근 트렉션 (Traction)을 획득하였습니다. XML (Extensible Markup Language)은 기본 파일 외부의 데이터를 참조하고 XML 문서로 호출하는데 사용할 수 있는 외부 엔티티를 지원합니다. XXE 공격은 웹 애플리케이션이 알 수 없거나 의심스러운 출처에서 XML 입력값을 분석하는 결함을 이용합니다. 악성 콘텐츠는 사용자 생성 또는 고객의 데이터를 애플리케이션으로 가져오는 문서 (예: XML 파일)에 삽입됩니다.

XXE는 페이스북에 대한 원격 코드를 실행하는 발판으로 사용되어 가장 큰 버그 중 하나가 되었습니다. XXE 취약점은 최근 Mac 애플리케이션에서 일반적으로 사용되는 업데이트 프레임워크, Google 검색 엔진의 기능인 Adobe ColdFusion의 XML parser (CVE-2016-4264) 및 Magento에서 사용되는 PHP 툴킷 (Zend)에서도 발견되었습니다.


교차 사이트 스크립팅 (Cross-site Scripting)

악성 스크립트를 사용자의 웹 브라우저에 삽입할 수 있도록 XSS (Cross-site scripting)의 결함을 악용합니다. OWASP의 최신 데이터는 XSS를 최고 보안 위험으로 인용하였으며, 종종 웹사이트 오류 및 자동화된 사이버 공격에 사용되었습니다.

XSS 기반 공격은 이러한 코드가 주입되는 방식과 공격자의 동기에 따라 다릅니다. XSS 공격은 데이터베이스, 로그인 및 검색 양식, 메모 필드 및 게시판 / 포럼 (저장된 XSS)과 같은 사용자 입력값을 처리하는 웹페이지에서 찾을 수 있습니다. 요청의 일부로 입력값이 서버로 전송되는 오류 및 검색 결과 페이지는 침입자가 삽입한 악성 스크립트 (중첩된 XSS)로 오인될 수 있습니다. 공격자는 또한 페이로드 (DOM 기반 XSS)를 실행하기 위해 대상의 웹 브라우저에서 DOM (document Object Model)을 수정할 수 있습니다.

해당 공격의 영향은 미미한 레벨부터 주요 보안 위험에 이르기까지 다양한데 이는 부적절한 콘텐츠로 웹사이트를 혼란에 빠뜨리거나, 세션 및 승인 쿠키를 훔치거나 변경, 유효하지 않은 것으로 해석될 수 있는 요청을 생성하거나, 악성 웹사이트로 사용자를 리디렉션하거나, 피해자의 계정을 가로채고 심지어 시스템에 멀웨어를 전달할 수도 있습니다. Yahoo!, Wordpress (플러그인 취약점 이용), Google Docs 및 Google Developers에 포함된 웹사이트/도메인 (Caja 툴킷의 결함 이용), MagentoWix와 같은 전자상거래와 웹 개발 플랫폼 등이 2016년 교차 사이트 스크립트에 관련된 사건들입니다.


안전 수칙

대부분의 경우와 마찬가지로 미리 예방하는 것이 가장 좋습니다. 다음은 IT 전문가 및 웹 개발자, 프로그래머가 이러한 공격을 방지하기 위해 사용할 수 있는 몇 가지 대응책입니다.


아무도 믿지 않는다. 웹 개발자는 모든 사용자가 생성한 입력값이 악의적인 것으로 가정해야 합니다. 입력값의 유효성 확인 및 악성 판단 여부 체크는 필수입니다. 화이트리스트에 있는 입력값을 제외한 입력값을 거절하는 것은 입력값을 안전하게 처리할 수 있는 방법 중 하나입니다.

보안을 포함한 디자인. 웹 프로그래머는 웹 애플리케이션 및 웹페이지에서 처리할 데이터의 개인 정보, 무결성 및 액세스 가능성을 유지할 수 있도록 개발 수명 주기 전반에 걸쳐 안전한 코딩 방법을 적용해야 합니다. 예를 들어 웹사이트 및 애플리케이션의 모양과 느낌을 유지하는 동시에 CSS (Cascading Style Sheet) 속성, HTML 특성 및 XML parser에서 신뢰할 수 없는 데이터의 유효성을 철저히 검증해야 외부 침입을 방지할 수 있습니다.

정기적 업데이트의 중요성. IT 전문가는 정지적으로 최신 업데이트 및 패치를 적용하여 시스템 및 해당 소프트웨어의 보안 결함이 노출되지 않도록 해야 하며, 개발자는 코딩 방법을 항상 최신 상태로 유지해야 합니다. 또한 정보 보안 인식 교육이 이루어져야 합니다.

복잡하게 하지 않습니다. 개발자는 공격에 취약한 도구 및 프로그래밍 기법을 가능한 한 사용하지 않아야 합니다. 예를 들어 동적 SQL 대신 준비 및 매개 변수화된 쿼리 혹은 저장 프로시저를 사용하는 것이 좋습니다. 또한 외부 엔티티 파싱을 비활성화하면 XXE 기반 서비스 거부 공격을 완화할 수 있습니다.

주기적인 검사. IT 전문가는 네트워크를 통과하는 악성 및 의심스러운 데이터나 트래픽을 감시해야 합니다. HTTP, HTTPS, SOAP (Simple Object Access Protocol) 및 XML 원격 프로시저 호출과 같은 웹사이트 혹은 웹 애플리케이션 내에서 오는 요청 및 응답은 항상 검사하십시오. 예를 들어 XSS 시도를 나타낼 수 있는 코드 아티팩트를 확인할 수 있습니다. WAF (Web Application Firewall)가 이를 지원합니다. WAF에는 또한 메시지 스크립트 (예: Java Script)를 정밀 조사할 수 있는 필터가 있으며 취약점 공격에 대한 보호 기능을 제공합니다. 개발자는 웹사이트나 웹 애플리케이션 방어 메커니즘을 계층화하여 심층 방어 보안 태세를 갖추어야 합니다.

노출을 줄입니다. 개발자는 웹사이트, 데이터베이스 또는 웹 애플리케이션 기능에 필요하지 않은 구성 요소를 비활성화해야 합니다. 때로는 공격자들이 공격의 영역을 넓힐 수도 있습니다. 예를 들어 권한을 높이고 명령 셸을 생성하는 기능은 해커나 SQL 서버 서비스 계정을 가로채는데 유용할 수 있습니다. 문서 형식 정의 (DTD)를 통해 엔티티를 사용하여 문서를 업로드하는 것을 방지하면 애플리케이션의 XXE 공격 위험을 줄일 수 있습니다. 애플리케이션 인터페이스 (API)를 사용하면 시스템 명령을 호출하기 전에 명령과 매개 변수를 구분할 수 있습니다. IT 전문가는 특정 애플리케이션 프로토콜과 관련된 네트워크 공격 및 악용을 막기 위해 불필요하거나 사용하지 않는 포트 (예: 인터넷에 대한 공용 HTTP / HTTPS 포트만 오픈)를 사용하지 않도록 설정하는 것이 좋습니다.

보안 유지. IT 전문가는 시스템 및 시스템에 대한 관리 수준의 액세스를 수반하는 공격을 완화하기 위해 권한 관리 정책을 시행해야 합니다. 개발자는 웹사이트 및 애플리케이션의 사용자 권한을 제한하고 자격 증명 및 기타 중요 데이터 (예: 연결 문자열)를 암호화하는 것이 좋습니다. 공격자들은 오류 페이지를 보고 데이터베이스 아키텍처에 대한 많은 것을 알아낼 수 있습니다. 따라서 개발자는 외부 오류 페이지에 최소한의 정보만 표기하여야 합니다.

재확인의 중요성. 개발자는 IT 전문가와 함께 웹 애플리케이션 및 웹사이트에서 배포 전 취약점에 노출될 수 있는지 테스트해야 합니다. 데이터베이스와 연결된 애플리케이션 및 서비스, 웹사이트에 대한 일상적임 침투 테스트를 통해 보안의 결함을 찾아낼 수 있습니다. 이러한 검사 프로세스 중에 사이트, 소프트웨어 또는 데이터베이스 인프라를 지속적으로 모니터링하면 간과되었을 수 있는 보안 결함 및 위험에 대해 알 수 있습니다.

경보를 울리십시오. 사건에 대한 대응은 복구 노력이 얼마나 적극적인지도 수반합니다. 포렌식 및 로그 분석 도구는 시스템 관리자와 IT 전문가가 해커의 진입 지점을 파악하고 개발자가 조치할 수 있는 결함 또는 취약한 구성 요소를 찾도록 도와줍니다. 여기에는 디스크 데이터 및 이미지뿐만 아니라 파일, 레지스트리, 이메일, 메모리, 웹페이지 및 네트워크 트래픽을 검사하고 분석하는 도구가 포함됩니다. 모든 데이터가 유출되거나 도난당했습니까? 공격으로 인해 웹사이트 또는 서버의 내용이 변경되었습니까? 기업의 위험 프로필을 알고 있으면 분석을 간소화할 수 있습니다.


트렌드마이크로 솔루션

Trend Micro™ Deep Security™은 취약점 보호를 위해 가상패치 기능을 제공하여 패치 되지 않은 취약점으로부터 엔드포인트를 보호합니다. OfficeScan의 Vulnerability Protection은 정식 패치가 배포되기 전에도 식별되거나 알려지지 않은 취약점 공격으로부터 엔드포인트를 보호합니다. Trend Micro™ Deep Discovery™는 사용자 맞춤형 샌드박스 및 전체 공격 수명주기에 걸친 완벽한 상관관계를 통해 탐지, 심층 분석 및 공격에 대한 선제적 대응 기능을 제공하여 엔진 및 패턴 업데이트 없이도 웹 주입과 같은 공격을 탐지합니다.


[원문: InfoSec Guide: Web Injections]