나는 파일리스 악성 코드의 정의를 이해합니다.
파일 기반이 아니지만 메모리에만 존재하는 악성 코드...더 구체적으로 말하면 파일 없는 악성 코드...메모리의 활성 프로세스에 자신을 부착하는...
기억 속의 활성 프로세스에 자신을 연결하는 것이 어떻게 작동하는지 설명할 수 있는 사람이 있습니까?
또한 그러한 공격에 대해 어떤 (커널) 보호/강화 기능이 있습니까?
답변1
파일리스 악성 코드는 브라우저 플래시 플러그인이나 네트워크 프로토콜의 취약점을 악용하여 대상을 공격합니다.
Linux 프로세스는 시스템 호출을 통해 수정 가능ptrace()
. 이 시스템 호출은 일반적으로 디버거에서 대상 프로세스의 내부 상태를 검사하고 관리하는 데 사용되며 소프트웨어 개발에 유용합니다.
예를 들어 PID가 1234인 프로세스를 생각해 보겠습니다. /proc
프로세스의 전체 주소 공간은 의사 파일 시스템의 위치에서 볼 수 있습니다 /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를 사용하는 것을 방지합니다.
답변2
프로세스 충돌이 발생하면 프로세스가 메모리에 데이터를 삽입하도록 할 수 있습니다. 매우 인기 있는 방법은 다음과 같습니다.버퍼 오버 플로우.
어떻게 작동하나요? 예를 들어, 프로세스가 포트 x에서 수신 대기 중이고 15바이트 크기의 일부 기능에 대한 버퍼가 있다는 것을 알고 있습니다. 15바이트의 데이터 + n바이트(실행할 코드)를 사용하여 함수를 호출합니다. 프로그램이 데이터의 유효성을 올바르게 검사하지 않으면 인접한 메모리를 코드로 덮어쓰므로 코드가 메모리에 남게 됩니다. 이 코드를 실행할 수 있다면 시스템을 갖춘 것입니다. 예를 들어, 프로세스는 자신 외부의 메모리에 쓸 수 없는 등 몇 가지 제한 사항이 있습니다.할당된 공간.
버퍼 오버플로로 인해 크래커가 대상 메모리에 데이터를 주입할 수 있는 모든 운영 체제에는 수많은 취약점 목록이 있습니다.