[unix] 파일리스 악성 코드는 리눅스에서 어떻게 작동합니까?
파일없는 악성 코드의 정의를 이해합니다.
파일 기반이 아니지만 메모리에만 존재하는 악성 코드… 더 구체적으로, 파일이없는 악성 코드… 메모리의 활성 프로세스에 자신을 추가합니다…
누군가 메모리의 활성 프로세스에 어떻게 추가되는지 설명해 주시겠습니까?
또한 이러한 공격에 대해 어떤 (커널) 보호 / 경화가 가능합니까?
답변
파일없는 멀웨어는 브라우저의 플래시 플러그인 또는 네트워크 프로토콜과 같은 취약점을 악용하여 대상을 공격합니다.
시스템 호출을 사용하여 Linux 프로세스를 수정할 수 있습니다 ptrace()
. 이 시스템 호출은 일반적으로 디버거에서 대상 프로세스의 내부 상태를 검사하고 관리하는 데 사용되며 소프트웨어 개발에 유용합니다.
예를 들어 PID 1234를 사용하는 프로세스를 생각해 봅시다.이 프로세스의 전체 주소 공간은 의사 파일 시스템 /proc
의 location에서 볼 수 있습니다 /proc/1234/mem
. 이 의사 파일을 연 다음 ptrace()
; 이렇게 한 후, 당신은 사용할 수 있습니다 pread()
및 pwrite()
프로세스 공간에 쓰기.
char file[64];
pid = 1234;
sprintf(file, "/proc/%ld/mem", (long)pid);
int fd = open(file, O_RDWR);
ptrace(PTRACE_ATTACH, pid, 0, 0);
waitpid(pid, NULL, 0);
off_t addr = ...; // target process address
pread(fd, &value, sizeof(value), addr);
// or
pwrite(fd, &value, sizeof(value), addr);
ptrace(PTRACE_DETACH, pid, 0, 0);
close(fd);
( 여기 에서 가져온 코드 . ptrace 익스플로잇에 관한 또 다른 논문이 여기에 있습니다 .)
이러한 공격에 대한 커널 지향 방어와 관련하여 유일한 방법은 커널 공급 업체 패치를 설치하거나 특정 공격 경로를 비활성화하는 것입니다. 예를 들어, ptrace의 경우 ptrace 차단 모듈을 커널에로드하여 특정 시스템 호출을 비활성화 할 수 있습니다. 분명히 이것은 또한 ptrace를 디버깅에 사용할 수 없게 만듭니다.
답변
프로세스가 중단되면 프로세스가 메모리에 데이터를 삽입하게 할 수 있습니다. 가장 일반적인 방법은 버퍼 오버플 로를 사용하는 것 입니다.
어떻게 작동합니까? 예를 들어, 프로세스가 포트 x에서 수신 대기 중이고 특정 기능 (예 : 15 바이트)에 대한 버퍼가 있음을 알고 있습니다. 15 바이트의 데이터 + n 바이트 (실행할 코드)로 해당 함수를 호출합니다. 프로그램이 데이터의 유효성을 제대로 검사하지 않으면 인접한 메모리를 코드로 덮어 쓰므로 코드는 메모리에 남아 있습니다. 이 코드를 실행할 수 있으면 시스템을 소유 한 것입니다. 예를 들어, 프로세스가 할당 된 공간 외부의 메모리에 쓸 수없는 제한이 있습니다 .
버퍼 오버런으로 인해 크래커가 대상의 메모리에 데이터를 주입 할 수있는 모든 OS의 취약점 목록이 길다.