쉘코드 예제

대부분의 셸 코드는 악용되는 취약점이 공격자에게 프로세스에 대한 액세스를 제공하는 낮은 수준 때문에 기계 코드로 작성됩니다. 따라서 Shellcode는 종종 플랫폼이라고 하는 프로세서, 운영 체제 및 서비스 팩의 특정 조합을 대상으로 만들어집니다. 일부 악용의 경우 대상 프로세스에 의해 셸 코드에 대한 제약 조건으로 인해 매우 구체적인 셸 코드를 만들어야 합니다. 그러나 하나의 셸 코드가 여러 악용, 서비스 팩, 운영 체제 및 프로세서에 대해 작동하는 것은 불가능하지 않습니다. [11] 이러한 다양성은 일반적으로 다양한 플랫폼을 대상으로 하는 포탄 코드의 여러 버전을 만들고 코드가 실행 중인 플랫폼의 올바른 버전으로 분기하는 헤더를 만들어 달성합니다. 실행될 때 코드는 다른 플랫폼에 대해 다르게 작동하며 실행 중인 플랫폼에 대한 셸코드의 오른쪽 부분을 실행합니다. 예를 들어, 우리는 하나의 시스템 호출이 필요하고 그 exit() (종료 코드로 현재 프로세스를 종료하고 종료)와 그 시스템 호출 번호는 1이고 인수는 0이며,(0은 프로그램이 정상적으로 종료된다는 것을 의미하며, 0은 오류가있는 프로그램 종료를 의미합니다). 그들은 각각 eax,ebx 레지스터에 저장됩니다. 이 지식을 사용하여 프로그램 인어셈블리(http://asm.sourceforge.net/)를 만들어 보겠습니다. 악용은 대상이 제공하는 리소스를 완전히 활용하여 정상적인 응용 프로그램 동작을 완전히 모방할 수 있습니다. 예를 들어 악용은 대상 프로토콜 지원 및 추가 기능을 사용하여 인코딩, 압축 및 암호화를 포함하여 페이로드를 위장할 수 있습니다. 대상이 예를 들어 전송 압축을 지원하는 경우 페이로드가 스트림에서 압축되고 취약한 조건이 트리거되기 전에 서버에서 압축 해제될 수 있습니다. 악용 예제에는 파일 형식 취약성 및 미디어 기반 프로토콜 서버 취약점이 포함됩니다.

많은 프로토콜 서버 구현은 실제 데이터 보다 더 많은 것을 필요로 하는 데이터 형식을 지원 하기 위해 인코딩 체계를 제공 합니다. 암호화를 사용하지 않는 간단한 권한 부여 메커니즘은 유니코드(UTF) 및 Base64와 같은 간단한 인코딩 체계를 사용할 가능성이 높습니다. 대상이 어떤 형태의 암호화를 제공하는 경우 페이로드는 일반 텍스트 전송 매체 대신 해당 매체를 사용할 수 있으며 파일 형식 취약점과 같은 대부분의 IDS 시스템에 의해 몰래 들어갈 가능성이 큽니다.