
CVE-2024-6387용 SSH 익스플로잇: glibc 기반 Linux 시스템에서 OpenSSH 서버의 RCE(원격 코드 실행)
CVE-2024-6387은 가상의 예시이지만, 실제 OpenSSH 서버 구현에 존재하는 취약점이라고 가정해 보겠습니다. 이 취약점은 원격 공격자가 서버에서 임의의 코드를 실행할 수 있게 하는 버퍼 오버플로우 또는 메모리 손상 문제를 포함할 수 있습니다. 이러한 취약점이 어떻게 악용될 수 있는지에 대한 높은 수준의 설명은 다음과 같습니다:
제공된 Python 코드는 CVE-2024-6387을 악용하도록 설계된 익스플로잇입니다. 다음은 이 코드가 수행하는 단계에 대한 자세한 설명입니다: 연결 설정: 대상 SSH 서버에 TCP 연결을 설정합니다.
def setup_connection(ip, port):
# ...
패킷 송수신: SSH 서버와 패킷을 주고받는 작업을 처리합니다.
def send_packet(sock, packet_type, data):
# ...
SSH 버전 교환: SSH 버전 문자열을 송수신하여 SSH 핸드셰이크를 시작합니다.
def send_ssh_version(sock):
# ...
def receive_ssh_version(sock):
# ...
키 교환 초기화(KEX_INIT): 키 교환 초기화 패킷을 송수신합니다.
def send_kex_init(sock):
# ...
def receive_kex_init(sock):
# ...
SSH 핸드셰이크 수행: 위 단계들을 결합하여 SSH 핸드셰이크를 완료합니다.
def perform_ssh_handshake(sock):
# ...
힙 준비: 서버의 힙 상태를 조작하기 위해 일련의 패킷을 전송합니다.
def prepare_heap(sock):
# ...
가짜 파일 구조: 메모리 손상 취약점을 악용하기 위해 가짜 파일 구조를 생성합니다.
def create_fake_file_structure(data, glibc_base):
# ...
파싱 시간 측정: 서버가 특정 패킷을 파싱하는 데 걸리는 시간을 측정하여 최종 익스플로잇의 타이밍을 정확히 맞추는 데 도움을 줍니다.
def time_final_packet(sock):
# ...
공개 키 패킷: 셸코드를 포함한 익스플로잇 페이로드가 담긴 패킷을 제작합니다.
def create_public_key_packet(packet, size, glibc_base):
# ...
레이스 컨디션 악용: 최종 패킷의 타이밍을 정확히 맞춰 레이스 컨디션을 악용하려고 시도합니다.
def attempt_race_condition(sock, parsing_time, glibc_base):
# ...
메인 함수: 서로 다른 glibc 베이스로 여러 번 시도하는 것을 포함하여 전체 익스플로잇 프로세스를 조정합니다.
def main():
# ...
CVE-2024-6387은 OpenSSH에서 원격 코드 실행을 허용하는 심각한 취약점입니다. 제공된 Python 스크립트는 힙을 조작하고 패킷 전송 타이밍을 맞춰 메모리 손상을 유발함으로써 이 취약점을 악용하며, 궁극적으로 서버에서 공격자의 셸코드를 실행합니다. 이 스크립트는 힙 스프레이, 메모리 손상, 레이스 컨디션을 위한 정밀 타이밍 등 일반적인 익스플로잇 개발 기법을 보여줍니다.