쉘 코드 란 무엇입니까?
ShellCode는 실행 프로그램을 제어하려는 의도로 컴퓨터의 메모리에 주입되는 기계 코드 또는 실행 가능한 지침 시퀀스입니다. 이러한 공격에서 단계 중 하나는 프로그램 카운터를 제어하는 것입니다.이 단계는 실행될 다음 명령을 식별합니다. 그런 다음 프로그램 흐름을 삽입 된 코드로 리디렉션 할 수 있습니다. 침입 기계 코드를 공격의 페이로드라고하며 쉘 코드라는 용어에 의해 일반적으로 언급되는 요소입니다. 이 방법은 종종 운영 시스템 명령 쉘을 열어 공격자 액세스 권한을 부여하는 데 사용되었으므로 일반적으로 코드 주입 공격은 쉘 코드로 알려져 있습니다.
악용되는 취약점은 일반적으로 프로그램이 메모리를 할당하고 입력 데이터의 유효성을 확인하고 메모리 오류를 처리하는 방법을 포함합니다. 소프트웨어 개발자는 일반적으로 입력 데이터를 엄격하게 정의하고 부적절한 값을 거부함으로써 이러한 위협을 피할 수 있습니다. 확인되지 않은 경우 메모리 할당보다 더 많은 저장 공간이 필요한 값그 값에 대한 ED가 받아 들여질 수 있습니다. 이로 인해 버퍼 오버 플로우 (버퍼 오버플로)라는 보안 브리치가 발생하며, 여기서 데이터의 일부는 값의 할당 된 공간에 인접한 메모리 위치에 기록됩니다. 신중하게 조작 할 때,이 이상은 침입 코드를 도입 할 수 있습니다.
ShellCode는 일반적으로 어셈블리, C 또는 C ++와 같은 저수준 시스템 액세스가있는 프로그래밍 언어로 작성됩니다. 그러나 대상 취약점에 따라 Perl과 같은 해석 된 스크립팅 언어 또는 Java와 같은 가상 시스템의 바이트 코드에 대한 코드를 삽입하여 동일한 결과를 실현할 수 있습니다. 코드는 프로그램 카운터의 납치 전, 도중 또는 후에 이식 될 수 있습니다. 따라서, 침입 코드는 대상 기계의 파일에 포함되거나 실시간으로 네트워크 연결을 통해 전송 될 수 있습니다.
로컬 쉘 코드 익스플로잇그 또는 그녀는 물리적으로 접근 할 수 있습니다. 이 경우 목표는 예를 들어 관리자 권한으로 계정을 작성하는 것입니다. 마찬가지로, 달리기 프로세스가 특권 수준이 높은 경우, 성공적인 악용은 침입자에 대한 동일한 수준의 액세스를 일시적으로 부여합니다.
원격 시스템에서 실행되는 프로세스는 표준 네트워크 프로토콜을 사용하여 대상 컴퓨터와 통신 할 수 있습니다. Connect-Back ShellCode는 대상 기계에 침입자의 컴퓨터에 대한 연결을 시작하도록 지시합니다. 침입자가 연결을 시작하면 코드를 원격 시스템의 포트라고 불리는 네트워크 연결을 제어하려고 시도하면서 코드를 Bindshell이라고합니다. 방화벽은 아웃 바운드 연결을 거의 금지하지 않기 때문에 Connect-Back 방법은 더 널리 사용됩니다.