웹 응용 프로그램의 문제는 수십억 명의 인터넷 사용자에게 공개적으로 노출되어 있으며 그 중 다수는 이유가 무엇이든 보안 조치를 깨고 싶어한다는 것입니다.

인터넷 초기에 가장 일반적인 공격 방법 중 하나는 기본적이고 단순한 무차별 공격이었습니다. 봇은 일반적으로 대상 애플리케이션에 대한 액세스 권한을 부여할 수 있는 사용자 이름과 암호 조합을 찾을 때까지 무수히 많은 사용자 이름과 암호 조합을 시도하는 이러한 공격(또는 시간이 많은 사람)을 수행했습니다.

무차별 대입 공격은 암호 정책, 제한된 로그인 시도 및 보안 문자 덕분에 더 이상 위협이 되지 않습니다. 그러나 사이버 범죄자들은 ​​새로운 익스플로잇을 발견하고 이를 사용하여 새로운 유형의 공격을 수행하는 것을 좋아합니다. 오래 전에 그들은 응용 프로그램이나 웹 페이지의 텍스트 필드에 예기치 않은 텍스트를 입력하거나 주입하여 응용 프로그램이 해서는 안 되는 작업을 수행하도록 하는 방식으로 악용될 수 있음을 발견했습니다. 그렇게 이른바 인젝션 공격이 등장했다.

주입 공격은 사용자 이름과 비밀번호 없이 애플리케이션에 로그인하는 데 사용될 수 있을 뿐만 아니라 개인 정보, 기밀 정보 또는 민감한 정보를 노출하거나 전체 서버를 하이재킹하는 데 사용될 수도 있습니다. 그렇기 때문에 이러한 공격은 웹 애플리케이션뿐만 아니라 해당 애플리케이션에 데이터가 있는 사용자, 최악의 경우 연결된 다른 애플리케이션 및 서비스에 대한 위협입니다.

코드 주입

코드 주입은 가장 일반적인 유형의 주입 공격 중 하나입니다. 공격자가 웹 애플리케이션에서 사용하는 프로그래밍 언어, 프레임워크, 데이터베이스 또는 운영 체제를 알고 있는 경우 텍스트 입력 필드를 통해 코드를 주입하여 웹 서버가 원하는 작업을 수행하도록 할 수 있습니다.

이러한 유형의 주입 공격은 입력 데이터 유효성 검사가 없는 애플리케이션에서 가능합니다. 텍스트 입력 필드에 사용자가 원하는 것을 입력할 수 있는 경우 응용 프로그램이 잠재적으로 악용될 수 있습니다. 이러한 공격을 방지하기 위해 애플리케이션은 입력 사용자가 입력할 수 있는 만큼 제한해야 합니다.

예를 들어 예상 데이터의 양을 제한하고, 데이터를 수락하기 전에 데이터 형식을 확인하고, 허용되는 문자 집합을 제한해야 합니다.

코드 주입 취약점은 다양한 유형의 콘텐츠로 웹 애플리케이션의 텍스트 입력을 테스트하기만 하면 쉽게 찾을 수 있습니다. 취약점이 발견되면 악용하기가 다소 어렵습니다. 그러나 공격자가 이러한 취약점 중 하나를 악용하는 경우 기밀성, 무결성, 가용성 또는 애플리케이션 기능의 손실이 포함될 수 있습니다.

  Microsoft Visual C++ 재배포 가능 패키지를 복구하는 방법

SQL 인젝션

코드 삽입과 유사한 방식으로 이 공격은 쿼리 작업을 수행하기 위해 대부분의 데이터베이스에서 사용하는 언어인 SQL 스크립트를 텍스트 입력 필드에 삽입합니다. 스크립트는 데이터베이스에서 직접 실행되는 응용 프로그램으로 전송됩니다. 결과적으로 공격자는 로그인 화면을 통과하거나 데이터베이스에서 직접 중요한 데이터를 읽거나 데이터베이스 데이터를 수정 또는 파괴하거나 데이터베이스에서 관리 작업을 실행하는 등 더 위험한 작업을 수행할 수 있습니다.

PHP 및 ASP 응용 프로그램은 이전 기능 인터페이스로 인해 SQL 삽입 공격에 취약합니다. J2EE 및 ASP.Net 앱은 일반적으로 이러한 공격으로부터 더 잘 보호됩니다. SQL 인젝션 취약점이 발견되고 쉽게 발견될 수 있는 경우 잠재적인 공격의 규모는 공격자의 기술과 상상력에 의해서만 제한됩니다. 따라서 SQL 주입 공격의 영향은 의심할 여지 없이 높습니다.

명령 주입

이러한 공격은 주로 불충분한 입력 검증으로 인해 가능합니다. 공격자가 프로그래밍 코드나 스크립트 대신 시스템 명령을 삽입한다는 점에서 코드 주입 공격과 다릅니다. 따라서 해커는 응용 프로그램이 기반으로 하는 프로그래밍 언어나 데이터베이스에서 사용하는 언어를 알 필요가 없습니다. 그러나 그들은 호스팅 서버에서 사용하는 운영 체제를 알아야 합니다.

삽입된 시스템 명령은 응용 프로그램의 권한으로 호스트 운영 체제에 의해 실행되며, 서버에 있는 임의 파일의 내용을 노출하고, 서버의 디렉터리 구조를 표시하고, 사용자 암호를 변경하는 등의 작업을 수행할 수 있습니다. .

이러한 공격은 시스템 관리자가 서버에서 실행되는 웹 응용 프로그램의 시스템 액세스 수준을 제한하여 방지할 수 있습니다.

교차 사이트 스크립팅

응용 프로그램이 유효성 검사나 인코딩 없이 생성된 출력에 사용자의 입력을 삽입할 때마다 공격자가 다른 최종 사용자에게 악성 코드를 보낼 수 있는 기회를 제공합니다. XSS(Cross-Site Scripting) 공격은 이러한 기회를 이용하여 신뢰할 수 있는 웹 사이트에 악의적인 스크립트를 삽입하고 궁극적으로 응용 프로그램의 다른 사용자에게 전송되어 공격자의 희생자가 됩니다.

피해자의 브라우저는 악성 스크립트를 신뢰할 수 없다는 사실을 모른 채 실행합니다. 따라서 브라우저는 세션 토큰, 쿠키 또는 브라우저에 저장된 민감한 정보에 액세스할 수 있습니다. 제대로 프로그래밍된 경우 스크립트는 HTML 파일의 내용을 다시 작성할 수도 있습니다.

XSS 공격은 일반적으로 저장형과 반사형의 두 가지 범주로 나눌 수 있습니다.

저장된 XSS 공격에서 악성 스크립트는 대상 서버, 메시지 포럼, 데이터베이스, 방문자 로그 등에 영구적으로 상주합니다. 피해자는 브라우저가 저장된 정보를 요청할 때 스크립트를 얻습니다. 반영된 XSS 공격에서 악의적인 스크립트는 서버로 전송된 입력을 포함하는 응답에 반영됩니다. 예를 들어 오류 메시지 또는 검색 결과일 수 있습니다.

XPath 주입

이러한 유형의 공격은 웹 애플리케이션이 사용자가 제공한 정보를 사용하여 XML 데이터에 대한 XPath 쿼리를 작성할 때 가능합니다. 이러한 공격이 작동하는 방식은 SQL 삽입과 유사합니다. 공격자는 XML 데이터가 어떻게 구성되어 있는지 알아보기 위해 응용 프로그램에 잘못된 정보를 보낸 다음 해당 데이터에 액세스하기 위해 다시 공격합니다.

  13 애플리케이션 성능 문제를 디버깅하기 위한 프로파일링 소프트웨어

XPath는 SQL처럼 찾고자 하는 속성을 지정할 수 있는 표준 언어입니다. XML 데이터에 대한 쿼리를 수행하기 위해 웹 애플리케이션은 사용자 입력을 사용하여 데이터가 일치해야 하는 패턴을 설정합니다. 잘못된 형식의 입력을 보내면 패턴이 공격자가 데이터에 적용하려는 작업으로 바뀔 수 있습니다.

SQL에서 발생하는 것과 달리 XPath에는 다른 버전이 없습니다. 이는 구현에 관계없이 XML 데이터를 사용하는 모든 웹 애플리케이션에서 XPath 주입을 수행할 수 있음을 의미합니다. 이는 또한 공격이 자동화될 수 있음을 의미합니다. 따라서 SQL 삽입과 달리 임의의 수의 목표에 대해 실행될 가능성이 있습니다.

메일 명령 주입

이 공격 방법은 부적절하게 검증된 사용자 입력으로 IMAP 또는 SMTP 문을 작성하는 이메일 서버 및 애플리케이션을 악용하는 데 사용할 수 있습니다. 경우에 따라 IMAP 및 SMTP 서버는 대부분의 웹 서버의 경우와 같이 공격에 대한 강력한 보호 기능이 없으므로 더 악용될 수 있습니다. 공격자는 메일 서버를 통해 접속하여 captchas, 제한된 수의 요청 등과 같은 제한을 피할 수 있습니다.

SMTP 서버를 악용하려면 공격자가 주입된 명령으로 메시지를 보낼 수 있는 유효한 이메일 계정이 필요합니다. 서버가 취약한 경우 공격자의 요청에 응답하여 예를 들어 서버 제한을 ​​무시하고 해당 서비스를 사용하여 스팸을 보낼 수 있습니다.

IMAP 주입은 메시지 읽기 기능을 악용하여 주로 웹메일 애플리케이션에서 수행될 수 있습니다. 이 경우 웹 브라우저의 주소창에 명령어가 삽입된 URL을 입력하는 것만으로 공격이 가능하다.

CRLF 주입

웹 양식 입력 필드에 CRLF로 알려진 캐리지 리턴 및 줄 바꿈 문자 조합은 CRLF 주입이라는 공격 방법을 나타냅니다. 이러한 보이지 않는 문자는 HTTP, MIME 또는 NNTP와 같은 많은 기존 인터넷 프로토콜에서 라인의 끝 또는 명령의 끝을 나타냅니다.

예를 들어 HTTP 요청에 CRLF를 삽입한 다음 일부 특정 HTML 코드를 삽입하면 웹 사이트 방문자에게 사용자 지정 웹 페이지를 보낼 수 있습니다.

이 공격은 사용자 입력에 적절한 필터링을 적용하지 않는 취약한 웹 애플리케이션에서 수행될 수 있습니다. 이 취약성은 XSS 및 코드 삽입과 같은 다른 유형의 삽입 공격에 대한 문을 열어주며 하이재킹 중인 웹 사이트에서 파생될 수도 있습니다.

호스트 헤더 삽입

많은 웹 사이트 또는 웹 응용 프로그램을 호스팅하는 서버에서 상주 웹 사이트 또는 웹 응용 프로그램(각각 가상 호스트라고 함)이 들어오는 요청을 처리해야 하는지를 결정하는 데 호스트 헤더가 필요합니다. 헤더의 값은 요청을 발송할 가상 호스트를 서버에 알려줍니다. 서버가 잘못된 호스트 헤더를 받으면 일반적으로 목록의 첫 번째 가상 호스트로 전달합니다. 이것은 공격자가 임의의 호스트 헤더를 서버의 첫 번째 가상 호스트로 보내는 데 사용할 수 있는 취약점을 구성합니다.

  9 Startup to Enterprise를 위한 최고의 방문자 관리 시스템

호스트 헤더의 조작은 일반적으로 PHP 응용 프로그램과 관련이 있지만 다른 웹 개발 기술로도 수행할 수 있습니다. 호스트 헤더 공격은 웹 캐시 포이즈닝과 같은 다른 유형의 공격을 가능하게 하는 역할을 합니다. 그 결과 암호 재설정과 같은 공격자의 민감한 작업 실행이 포함될 수 있습니다.

LDAP 주입

LDAP는 네트워크에서 리소스(장치, 파일, 기타 사용자) 검색을 용이하게 하도록 설계된 프로토콜입니다. 인트라넷에 매우 유용하며 싱글 사인온 시스템의 일부로 사용될 때 사용자 이름과 암호를 저장하는 데 사용할 수 있습니다. LDAP 쿼리에는 제어에 영향을 미치는 특수 제어 문자의 사용이 포함됩니다. 공격자는 제어 문자를 삽입할 수 있는 경우 LDAP 쿼리의 의도된 동작을 잠재적으로 변경할 수 있습니다.

다시 말하지만, LDAP 주입 공격을 허용하는 근본 문제는 사용자 입력의 유효성이 부적절하다는 것입니다. 사용자가 응용 프로그램에 보내는 텍스트를 삭제하지 않고 LDAP 쿼리의 일부로 사용하는 경우 쿼리는 결국 별표를 사용하여 모든 사용자 목록을 검색하고 공격자에게 표시할 수 있습니다.

입력 문자열 내부의 올바른 위치에 있습니다.

인젝션 공격 방지

이 기사에서 보았듯이 모든 인젝션 공격은 모든 인터넷 사용자에게 공개 액세스 권한이 있는 서버와 애플리케이션을 향합니다. 이러한 공격을 방지하는 책임은 응용 프로그램 개발자와 서버 관리자에게 분산되어 있습니다.

애플리케이션 개발자는 사용자 입력의 잘못된 유효성 검사와 관련된 위험을 알고 위험 방지 목적으로 사용자 입력을 삭제하는 모범 사례를 배워야 합니다. 서버 관리자는 시스템을 주기적으로 감사하여 취약성을 감지하고 가능한 한 빨리 수정해야 합니다. 주문형 또는 자동으로 이러한 감사를 수행하는 많은 옵션이 있습니다.

x