코더는 보안을 정복 : 공유 및 학습 시리즈 - 코드 주입

게시일: 2019년 5월 16일
by Jaap Karan Singh
사례 연구

코더는 보안을 정복 : 공유 및 학습 시리즈 - 코드 주입

게시일: 2019년 5월 16일
by Jaap Karan Singh
리소스 보기
리소스 보기

코드 주입 공격은 많은 웹 사이트와 응용 프로그램이 발생할 가장 일반적이며 가장 위험합니다. 정교함과 그들이 제기하는 위험측면에서 영역을 모두 실행하지만 사용자 입력을 허용하는 거의 모든 사이트 나 앱이 취약할 수 있습니다. 사실, 이러한 종류의 공격은 거의 모든 사이버 보안 수비수가 경력의 어느 시점에서 처리해야 하며 아마도 여러 번 다루어야 할 것입니다.

응용 프로그램 이나 웹 사이트가 사용자의 입력을 수락 할 때마다 코드 주입 공격이 발생할 수 있습니다. 이는 검색 기능을 제공하거나 사용자에게 식별 정보를 입력하도록 요청하는 것만큼 간단할 수 있습니다. 악의적인 사용자가 일반 텍스트 입력 대신 오픈 필드에 코드를 입력하면 공격이 발생합니다. 그들의 목표는 서버가 유효한 코드에 대한 입력을 실수로 한 다음 공격자가 원하는 모든 기능을 실행하는 것입니다.

코드 주입 공격은 매우 일반적이지만 이를 중지하는 데 사용할 수 있는 방어도 마찬가지입니다. 이 에피소드에서는 다음을 배우게 됩니다.

  • 작동 방식
  • 왜 그렇게 위험합니까?
  • 방어를 막기 위해 어떻게 방어할 수 있을까요?

공격자는 코드 주입을 어떻게 사용합니까?

코드 주입 공격에 대한 구체적인 세부 정보는 사용되는 프로그래밍 언어에 따라 변경되지만 사용자가 데이터를 입력할 수 있는 한 모든 앱 이나 웹 사이트가 취약할 수 있습니다. SQL, HTML, XML, CSS 및 기타 모든 일반적인 프로그래밍 언어에 대해 코드 주입 공격이 트리거되었습니다.

첫째, 공격자는 일반적으로 사용자가 자신의 입력을 입력할 수 있는 시점에서 응용 프로그램 내에서 취약한 코드를 찾아야 합니다. 예를 들어 이 코드는 PHP eval() 함수를 가져와 반환 문자열의 유효성 검사 없이 수정하기 위해 사용자에게 전달합니다.

$myvar = "varname";
$x = $_GET[arg];
eval("\$myvar = \$x;");

영리한 공격자는 eval 함수에 자신의 문자열을 쉽게 추가할 수 있으며, 원하는 경우 시스템 명령을 실행하기도 합니다.

/index.php?arg=1; 시스템(id)

코드 주입 공격에는 시스템 명령 전송이 포함될 수 있지만 그렇게 하는 것만으로는 제한되지 않습니다. 사실, 코드 주입 공격으로, 해커는 언어 자체의 기능에 의해 제한됩니다. 이 예제에서는 공격자가 대상 시스템을 프로그래밍하여 PHP 프레임워크에서 허용하는 거의 모든 작업을 수행할 수 있습니다.

코드 주입 공격이 왜 그렇게 위험한가요?

코드 주입 공격은 공격자의 기술에 따라 잠재적으로 매우 위험할 수 있습니다. 프로그래밍 언어가 허용하는 모든 작업을 수행할 수 있으며, 이 언어는 앱 프로그래머와 동일한 발판을 마련할 수 있습니다. 공격자는 실질적으로 자신의 앱을 작성하고 대상 환경 내에서 실행할 수 있습니다.

숙련도가 낮을 수 있는 공격자도 위험할 수 있습니다. 자체 응용 프로그램 이나 코드 문자열을 작성 하는 대신, 그들은 단순히 수락 하 고 미리 프로그래밍 된 악성 코드를 설치 하는 대상 된 시스템을 주문할 수 있습니다. 이로 인해 사이트 훼손, 랜섬웨어 공격 또는 사이트 사용자에 대해 평준화된 피싱 캠페인의 기초가 될 수도 있습니다.

대부분의 경우 코드 주입 공격은 사용자 목록 및 암호와 같은 것들을 훔치거나 추가 타협을 목표로 하는 시스템에 귀중한 정찰을 얻는 데 사용됩니다. 그러나 경고, 숙련 된 코더는 코드 주입 공격으로 거의 모든 작업을 수행 할 수 있습니다, 그래서 그 중 모든 잠재적 인 인스턴스가 발견및 환경에서 제거되는 것이 중요합니다.

아무도 신뢰! (또는 적어도, 사용자가 아님)

코드 사출 공격 취약점을 제거할 때 가장 먼저 살펴볼 장소는 사용자 입력을 요청하거나 허용하는 곳입니다. 사용자가 입력한 모든 항목은 어떠한 경우에도 신뢰할 수 없습니다. 필터링이나 검사 없이 사용자 입력을 허용하는 경우 기본적으로 공격자가 시스템이나 네트워크를 손상시키는 데 무료 촬영을 하도록 초대합니다.

항상 가능한 것은 아니지만 코드 주입 공격을 차단하는 가장 좋은 방법은 함수가 사용자 입력을 직접 실행하거나 해석하는 것을 방지하는 것입니다. 아마도 사용자는 자신의 쿼리를 입력하는 자유 통치 대신 정적 옵션을 선택할 수 있으며 응용 프로그램은 제한된 선택만 유효한 것으로 받아들이도록 프로그래밍됩니다. 항상 그렇게 하는 것이 적절하지는 않지만 가능한 경우 코드 주사를 시작하기 전에 제거할 수 있습니다.

사용자가 자신의 입력을 입력해야 하는 영역의 경우 해당 데이터에 엄격한 컨트롤을 배치해야 합니다. 모든 것이 잠재적인 공격이라고 가정하는 것은 시작하기에 좋은 장소입니다. 클라이언트와 서버 쪽 모두에서 읽기 전용 사용자 액세스와 같은 최소 권한 정책을 적용하면 대부분의 코드가 실행되지 않도록 할 수 있습니다.

다른 좋은 방어는 모든 사용자 입력에 응용 프로그램 전체 필터 및 위생을 구현하는 것입니다. 개발자는 수년 동안 코드 주입 공격을 알고 있었으며 모든 프레임워크와 언어에 입증된 필터 라이브러리가 존재합니다. 이러한 필터를 적용할 때는 명백한 사용자 입력 영역이나 Get 및 Post 명령과 같은 일반적인 매개 변수뿐만 아니라 쿠키 및 HTTP 헤더에 대해서도 적용해야 합니다.

코드 주입에 대한 수정 적용

사용자 환경에서 불필요한 사용자 입력 영역을 제거하고 최소한의 권한 원칙을 적용하고 최신 필터링 및 소독 도구를 사용하여 잠재적인 공격을 검사하고 감지하면 이 위험한 취약점의 문이 닫을 수 있습니다. 사용자 입력을 신뢰하지 않는 사고 방식을 갖는 것은 또한 잘 앞으로 나아갈 수 있습니다. 이 모든 것을 할 수 있으며, 이 위험한 유형의 공격보다 한 발 앞서 나갈 수 있습니다.

추가 읽기를 위해 코드 주입에 대한 OWASP 쓰기를 살펴 볼 수 있습니다. 또한 새로운 방어 지식을 테스트에 넣을 수 있습니다. Secure Code Warrior 사이버 보안 팀이 궁극적인 사이버 전사가 될 수 있도록 하는 플랫폼. 이 취약점을 물리치는 것에 대해 자세히 알아보려면 Secure Code Warrior 블로그.

페이스 코드 사출 정면, 지금. 게임화된 교육 플랫폼에서 도전하기: [여기에서 시작]

리소스 보기
리소스 보기

저자

야프 카란 싱

더 알고 싶으신가요?

블로그에서 최신 보안 코딩 인사이트에 대해 자세히 알아보세요.

Atlassian의 광범위한 리소스 라이브러리는 안전한 코딩 숙련도를 확보하기 위한 인적 접근 방식을 강화하는 것을 목표로 합니다.

블로그 보기
더 알고 싶으신가요?

개발자 중심 보안에 대한 최신 연구 보기

광범위한 리소스 라이브러리에는 개발자 중심의 보안 코딩을 시작하는 데 도움이 되는 백서부터 웨비나까지 유용한 리소스가 가득합니다. 지금 살펴보세요.

리소스 허브

코더는 보안을 정복 : 공유 및 학습 시리즈 - 코드 주입

게시일: 2019년 5월 16일
Jaap Karan Singh

코드 주입 공격은 많은 웹 사이트와 응용 프로그램이 발생할 가장 일반적이며 가장 위험합니다. 정교함과 그들이 제기하는 위험측면에서 영역을 모두 실행하지만 사용자 입력을 허용하는 거의 모든 사이트 나 앱이 취약할 수 있습니다. 사실, 이러한 종류의 공격은 거의 모든 사이버 보안 수비수가 경력의 어느 시점에서 처리해야 하며 아마도 여러 번 다루어야 할 것입니다.

응용 프로그램 이나 웹 사이트가 사용자의 입력을 수락 할 때마다 코드 주입 공격이 발생할 수 있습니다. 이는 검색 기능을 제공하거나 사용자에게 식별 정보를 입력하도록 요청하는 것만큼 간단할 수 있습니다. 악의적인 사용자가 일반 텍스트 입력 대신 오픈 필드에 코드를 입력하면 공격이 발생합니다. 그들의 목표는 서버가 유효한 코드에 대한 입력을 실수로 한 다음 공격자가 원하는 모든 기능을 실행하는 것입니다.

코드 주입 공격은 매우 일반적이지만 이를 중지하는 데 사용할 수 있는 방어도 마찬가지입니다. 이 에피소드에서는 다음을 배우게 됩니다.

  • 작동 방식
  • 왜 그렇게 위험합니까?
  • 방어를 막기 위해 어떻게 방어할 수 있을까요?

공격자는 코드 주입을 어떻게 사용합니까?

코드 주입 공격에 대한 구체적인 세부 정보는 사용되는 프로그래밍 언어에 따라 변경되지만 사용자가 데이터를 입력할 수 있는 한 모든 앱 이나 웹 사이트가 취약할 수 있습니다. SQL, HTML, XML, CSS 및 기타 모든 일반적인 프로그래밍 언어에 대해 코드 주입 공격이 트리거되었습니다.

첫째, 공격자는 일반적으로 사용자가 자신의 입력을 입력할 수 있는 시점에서 응용 프로그램 내에서 취약한 코드를 찾아야 합니다. 예를 들어 이 코드는 PHP eval() 함수를 가져와 반환 문자열의 유효성 검사 없이 수정하기 위해 사용자에게 전달합니다.

$myvar = "varname";
$x = $_GET[arg];
eval("\$myvar = \$x;");

영리한 공격자는 eval 함수에 자신의 문자열을 쉽게 추가할 수 있으며, 원하는 경우 시스템 명령을 실행하기도 합니다.

/index.php?arg=1; 시스템(id)

코드 주입 공격에는 시스템 명령 전송이 포함될 수 있지만 그렇게 하는 것만으로는 제한되지 않습니다. 사실, 코드 주입 공격으로, 해커는 언어 자체의 기능에 의해 제한됩니다. 이 예제에서는 공격자가 대상 시스템을 프로그래밍하여 PHP 프레임워크에서 허용하는 거의 모든 작업을 수행할 수 있습니다.

코드 주입 공격이 왜 그렇게 위험한가요?

코드 주입 공격은 공격자의 기술에 따라 잠재적으로 매우 위험할 수 있습니다. 프로그래밍 언어가 허용하는 모든 작업을 수행할 수 있으며, 이 언어는 앱 프로그래머와 동일한 발판을 마련할 수 있습니다. 공격자는 실질적으로 자신의 앱을 작성하고 대상 환경 내에서 실행할 수 있습니다.

숙련도가 낮을 수 있는 공격자도 위험할 수 있습니다. 자체 응용 프로그램 이나 코드 문자열을 작성 하는 대신, 그들은 단순히 수락 하 고 미리 프로그래밍 된 악성 코드를 설치 하는 대상 된 시스템을 주문할 수 있습니다. 이로 인해 사이트 훼손, 랜섬웨어 공격 또는 사이트 사용자에 대해 평준화된 피싱 캠페인의 기초가 될 수도 있습니다.

대부분의 경우 코드 주입 공격은 사용자 목록 및 암호와 같은 것들을 훔치거나 추가 타협을 목표로 하는 시스템에 귀중한 정찰을 얻는 데 사용됩니다. 그러나 경고, 숙련 된 코더는 코드 주입 공격으로 거의 모든 작업을 수행 할 수 있습니다, 그래서 그 중 모든 잠재적 인 인스턴스가 발견및 환경에서 제거되는 것이 중요합니다.

아무도 신뢰! (또는 적어도, 사용자가 아님)

코드 사출 공격 취약점을 제거할 때 가장 먼저 살펴볼 장소는 사용자 입력을 요청하거나 허용하는 곳입니다. 사용자가 입력한 모든 항목은 어떠한 경우에도 신뢰할 수 없습니다. 필터링이나 검사 없이 사용자 입력을 허용하는 경우 기본적으로 공격자가 시스템이나 네트워크를 손상시키는 데 무료 촬영을 하도록 초대합니다.

항상 가능한 것은 아니지만 코드 주입 공격을 차단하는 가장 좋은 방법은 함수가 사용자 입력을 직접 실행하거나 해석하는 것을 방지하는 것입니다. 아마도 사용자는 자신의 쿼리를 입력하는 자유 통치 대신 정적 옵션을 선택할 수 있으며 응용 프로그램은 제한된 선택만 유효한 것으로 받아들이도록 프로그래밍됩니다. 항상 그렇게 하는 것이 적절하지는 않지만 가능한 경우 코드 주사를 시작하기 전에 제거할 수 있습니다.

사용자가 자신의 입력을 입력해야 하는 영역의 경우 해당 데이터에 엄격한 컨트롤을 배치해야 합니다. 모든 것이 잠재적인 공격이라고 가정하는 것은 시작하기에 좋은 장소입니다. 클라이언트와 서버 쪽 모두에서 읽기 전용 사용자 액세스와 같은 최소 권한 정책을 적용하면 대부분의 코드가 실행되지 않도록 할 수 있습니다.

다른 좋은 방어는 모든 사용자 입력에 응용 프로그램 전체 필터 및 위생을 구현하는 것입니다. 개발자는 수년 동안 코드 주입 공격을 알고 있었으며 모든 프레임워크와 언어에 입증된 필터 라이브러리가 존재합니다. 이러한 필터를 적용할 때는 명백한 사용자 입력 영역이나 Get 및 Post 명령과 같은 일반적인 매개 변수뿐만 아니라 쿠키 및 HTTP 헤더에 대해서도 적용해야 합니다.

코드 주입에 대한 수정 적용

사용자 환경에서 불필요한 사용자 입력 영역을 제거하고 최소한의 권한 원칙을 적용하고 최신 필터링 및 소독 도구를 사용하여 잠재적인 공격을 검사하고 감지하면 이 위험한 취약점의 문이 닫을 수 있습니다. 사용자 입력을 신뢰하지 않는 사고 방식을 갖는 것은 또한 잘 앞으로 나아갈 수 있습니다. 이 모든 것을 할 수 있으며, 이 위험한 유형의 공격보다 한 발 앞서 나갈 수 있습니다.

추가 읽기를 위해 코드 주입에 대한 OWASP 쓰기를 살펴 볼 수 있습니다. 또한 새로운 방어 지식을 테스트에 넣을 수 있습니다. Secure Code Warrior 사이버 보안 팀이 궁극적인 사이버 전사가 될 수 있도록 하는 플랫폼. 이 취약점을 물리치는 것에 대해 자세히 알아보려면 Secure Code Warrior 블로그.

페이스 코드 사출 정면, 지금. 게임화된 교육 플랫폼에서 도전하기: [여기에서 시작]

우리는 당신에게 우리의 제품 및 / 또는 관련 보안 코딩 주제에 대한 정보를 보낼 수있는 귀하의 허가를 바랍니다. 우리는 항상 최대한의주의를 기울여 귀하의 개인 정보를 취급 할 것이며 마케팅 목적으로 다른 회사에 판매하지 않을 것입니다.

양식을 제출하려면 '분석' 쿠키를 활성화하세요. 완료되면 언제든지 다시 비활성화할 수 있습니다.