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