내 서버가 손상되어 악의적인 사용자의 열린 파일을 가져오려고 하는데 사용자에게 UID가 없으므로 아무것도 찾을 수 없다는 메시지가 나타납니다. 이 사용자가 일부 프로세스를 실행하고 있는 것을 확인했지만 열려 있는 파일을 가져올 수 없습니다.
답변1
사용자에게 UID가 없다고 합니다
나는 그것에 확실히 동의합니다. "서버에서 작업을 실행하는 악의적인 사용자"는 UID 없이 사용자를 정의하지만 이는 해당 사용자가 다른 UID를 사용하여 컴퓨터에서 작업을 실행할 수 있기 때문입니다(앞으로는 "공격자"라는 용어를 사용하겠습니다). ) .
fork()
따라서 올바른 경로는 공격자가 컴퓨터에서 실행할 수 있는 프로세스를 제어하기 위해 어떤 경로를 사용했는지 알아내는 것입니다 exec()
. 결국 성공적인 공격은 이를 수행할 수 있는 프로세스(아마도 매우 정교한 방식)를 제어하는 것부터 시작되기 때문에 이는 시작하기 매우 좋은 곳입니다. 공격자가 이를 달성하는 방법은 공격에 따라 다릅니다.
즉 말하자면,Canon이 감염된 서버를 처리하는 방법에 대해 답변합니다.이다궤도에서 핵무기로 파괴하세요. 이는 더 이상 귀하의 컴퓨터가 아니며 공격자가 얼마나 많은 액세스 권한을 얻었는지 알 수 없습니다. 공격자가 루트 액세스 권한을 얻으면 한때 귀하의 서버였던 서버에서 실행되는 가상 머신에 잠재적으로 연결할 수 있습니다. 아니면 루트킷을 다루고 있을 수도 있습니다.
(참고: "Nuke from Orbit"은 대부분의 사람들에게 "새 설치"를 의미합니다.)
실제 질문으로 돌아가서:
사용자 이름에 UID가 없는 이유는 무엇입니까?
또는 더 나은 방법은 질문 텍스트가 의미하는 바입니다.
(UID 없이 프로세스를 어떻게 실행할 수 있나요?)
UID 없이 프로세스가 실행된다는 생각은 터무니없습니다. 프로세스의 존재를 유지하는 커널 구조(실제로는 KSE)에는 채워야 하는 UID 필드가 포함되어 있습니다(커널 오류가 발생하면 가비지로 채워지더라도). 따라서 각 프로세스에는 항상 UID가 있습니다.
당신이 다룰 가능성이 가장 높은 것은 에 나열되지 않은 UID입니다 /etc/passwd
. 프로세스에서는 이상하지만 작업을 수행하는 것과 다르지 않습니다 touch leet; chown 1337 leet
(해당 UID에 대한 사용자 권한이 없다고 가정). 거의 모든 표준 *nix 도구는 사용자 이름과 마찬가지로 UID를 처리할 수 있습니다. 즉
lsof -u username
동등하다
lsof -u `id -u username`
그리고
find . -user username
또한
find . -user `id -u username`
그럼 첫 번째 문장으로 돌아가서(강조):
그것은 말한다사용자에게 UID가 없습니다
어떤 식으로든그것표준 *nix 도구가 아닙니다. 아니면 생각보다 형편이 너무 안 좋아서 도망가고 있을지도 모릅니다.~에공격자들이 만들어낸 꽤 이상한 상황들.
답변2
시스템에서 소유자 없는 파일을 찾으려면 다음을 실행할 수 있습니다.find / -nouser
또한 실행하여 find /sbin -mtime 1
하루 이내에 수정된 /sbin 디렉터리의 파일을 찾을 수도 있습니다.
답변3
간단히 말해서, 사용자와 바이너리가 시스템에서 제거되었거나 루트가 프로세스를 시작하고 UID를 변경했을 수 있으므로 바이너리를 찾지 못할 수도 있습니다.
이 시점에서는 감염된 시스템에서 부팅하지 않고 라이브 배포판에서 부팅하여 파일 시스템을 분석합니다. Grochmal이 말했듯이 루트 취약점이 존재하는 경우 손상된 도구/바이너리를 설치할 수 있습니다. 사용자에게 알려지지 않은 바이너리가 있다는 사실은 이를 강력하게 시사합니다.
즉, 루트 업그레이드나 단순한 사용자 비밀번호 위반 등 몇 가지 시스템 침해를 본 적이 있으며, 바이너리를 실행한 다음 삭제하여 포렌식 작업을 복잡하게 만드는 것이 일반적인 추세인 것 같습니다.
답변4
docker
또한 컨테이너 내부의 UID가 호스트 OS의 사용자에 매핑되지 않을 수 있으므로 이를 사용할 때 이러한 현상을 본 적이 있습니다 .