파일리스 악성 코드는 리눅스에서 어떻게 작동합니까?


10

파일없는 악성 코드의 정의를 이해합니다.

파일 기반이 아니지만 메모리에만 존재하는 악성 코드… 더 구체적으로, 파일이없는 악성 코드… 메모리의 활성 프로세스에 자신을 추가합니다…

누군가 메모리의 활성 프로세스에 어떻게 추가되는지 설명해 주시겠습니까?

또한 이러한 공격에 대해 어떤 (커널) 보호 / 경화가 가능합니까?


예를 들어, 네트워크 응용 프로그램에서 버퍼 오버플로를 악용 한 다음 응용 프로그램 내에서 실행되고 네트워크를 통해 확산되는 악성 코드를 다운로드합니다. 관련된 파일이 없습니다. 질문의 두 번째 부분은 매우 광범위합니다. 본질적으로 "맬웨어에 대한 대책은 무엇입니까?"
dirkt

이 질문은 https://security.stackexchange.com/ 에서 더 잘 답변 될 수 있습니다 .
rubynorails

@rubynorails-리눅스 전용 답변에만 관심이 있습니다. SecuritySE는 일반적입니다. 리눅스 관련 답변을 요청하면 여기로 보내드립니다.
Martin Vegter

답변:


6

파일없는 멀웨어는 브라우저의 플래시 플러그인 또는 네트워크 프로토콜과 같은 취약점을 악용하여 대상을 공격합니다.

시스템 호출을 사용하여 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를 디버깅에 사용할 수 없게 만듭니다.


다른 답변 과 마찬가지로 이것도 구식입니다. 여기서 설명 하듯 이 더 이상 프로세스를 읽거나 쓰기 위해 프로세스를 ptrace 할 필요가 없습니다 /proc/PID/mem. 신화와 잘못된 정보를 영구히 유지하는 대신 다른 사람보다 내화성이 떨어지기 때문에 답변을 업데이트하고 수정하는 것이 좋습니다.
pizdelect

...이 경우 사람들은 프로세스를 추적하여 다른 프로세스가 메모리를 읽지 못하게 할 수 있다고 잘못 가정 할 수 있으므로 결과가 발생할 수 있습니다 .
pizdelect

@pizdelect 링크 주셔서 감사합니다. 내용을 다른 답변으로 추가하면 좋습니다.
dr_

아니요, 다른 답변을 추가하지 않겠습니다. 나는 당신이 당신의 문제를 해결하기를 기대하고 있습니다.
pizdelect

다른 사람의 답변도 편집 할 수 있습니다. 이 특정 주제에 대해 나보다 더 잘 알고있는 것 같습니다.
dr_

1

프로세스가 중단되면 프로세스가 메모리에 데이터를 삽입하게 할 수 있습니다. 가장 일반적인 방법은 버퍼 오버플 로를 사용하는 것 입니다.

어떻게 작동합니까? 예를 들어, 프로세스가 포트 x에서 수신 대기 중이고 특정 기능 (예 : 15 바이트)에 대한 버퍼가 있음을 알고 있습니다. 15 바이트의 데이터 + n 바이트 (실행할 코드)로 해당 함수를 호출합니다. 프로그램이 데이터의 유효성을 제대로 검사하지 않으면 인접한 메모리를 코드로 덮어 쓰므로 코드는 메모리에 남아 있습니다. 이 코드를 실행할 수 있으면 시스템을 소유 한 것입니다. 예를 들어, 프로세스가 할당 된 공간 외부의 메모리에 쓸 수없는 제한이 있습니다 .

버퍼 오버런으로 인해 크래커가 대상의 메모리에 데이터를 주입 할 수있는 모든 OS의 취약점 목록이 길다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.