루트가 아닌 사용자가 파일 수정 시간을 변경하는 것을 방지하는 방법

루트가 아닌 사용자가 파일 수정 시간을 변경하는 것을 방지하는 방법

나는 누군가가 파일을 생성한 다음 생성 날짜를 이전 날짜로 변경하는 것을 원하지 않습니다(예: 터치 또는 시스템 호출 사용).

내 Ubuntu 호스팅 계정에서 해킹된 PHP 코드를 많이 받았습니다.

파일이 도착할 때 파일 시간을 변경하지 못하도록 비활성화하면 새 파일을 쉽게 찾는 데 도움이 됩니다.

이것을 달성할 수 있는 방법이 있나요?어디서도 답을 찾을 수 없어요!

답변1

내가 아는 한, 사용자가 변경한 파일의 수정 시간을 제한할 수 있는 방법은 없습니다. 수정 시간을 변경하는 것은 예를 들어 아카이브에서 파일을 추출하거나 다른 컴퓨터에서 파일을 복사할 때 사용되는 일반적인 기능입니다.

수정 시간을 보는 대신 inode 변경 시간(ctime)을 살펴보세요. mtime 대신 ctime을 나열하는 -c옵션 을 전달합니다 .ls

ctime을 나열하면 최근에 수정되거나 이동된 파일을 감지할 수 있습니다. 물론 오탐(false positive)이 발생할 수도 있습니다. 공격자가 루트 액세스 권한을 갖고 있으면 모든 베팅이 취소됩니다.

이는 수리보다 법의학에 더 유용합니다. 명백히 감염된 파일을 삭제하는 등의 간단한 수정을 통해 가장 기본적인 공격만 대응할 수 있습니다. 일반적으로 찾을 수 있는 것보다 더 많은 공격이 있습니다. 공격을 탐지한 경우:

  1. 시스템을 오프라인으로 전환합니다. 사본을 만드세요.
  2. 전체 시스템을 다시 설치~에서알려진 좋은 소스. 감염된 시스템의 어떤 것도 재사용하지 마십시오. 신뢰할 수 없습니다. 알려진 보안 취약점이 없는 모든 소프트웨어의 최신 버전을 설치했는지 확인하십시오.
  3. 다음에서 데이터를 복구하세요.알려진 양호한 백업. 마찬가지로, 손상된 시스템에서 생성된 데이터는 신뢰할 수 없습니다.
  4. 감염된 시스템의 복사본을 연구하여 공격자가 어떻게 침입했는지 알아보세요. 공격자가 침입하는 방법(취약성)은 공격자가 나중에 수행하는 방법(페이로드)과 매우 다릅니다. 증상이 아닌 근본 원인을 찾아야 합니다. 이 부분은 전문가가 필요할 수 있습니다.
  5. 근본 원인이 더 이상 존재하지 않는다고 판단되면(잘못된 구성 또는 보안 버그가 수정됨) 새 시스템을 온라인으로 전환할 수 있습니다.

답변2

구성 파일의 옵션을 사용하여 mtime이러한 PHP 기능을 비활성화함으로써(예를 들어 ) touch해커가 PHP 코드를 사용하여 웹 서버()에서 쓸 수 있는 파일의 수정 시간을 변경하는 것을 방지 할 수 있습니다.[disable_functions][1]php.ini

그러나 파일 수정 시간은 서버에 업로드될 때 변경되지 않으므로 수정 시간을 추적하는 것은 올바른 접근 방식이 아닙니다(즉, 이 시간은 시스템이 손상되었을 때보다 훨씬 빠를 수 있음). 더 나은 접근 방식은 ctimeinode 파일의 상태가 변경되는 시기를 추적하는 것입니다 ( ). 내가 의미하는 바를 증명하려면 다음을 수행하십시오.

$ touch test.txt
$ stat test.txt
  File: ‘test.txt’
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
...
Access: 2014-10-28 05:51:10.329081380 +0000
Modify: 2014-10-28 05:51:10.329081380 +0000
Change: 2014-10-28 05:51:10.329081380 +0000

$ touch -t 10011234 test.txt 
$ stat test.txt
  File: ‘test.txt’
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
...
Access: 2014-10-01 12:34:00.000000000 +0000
Modify: 2014-10-01 12:34:00.000000000 +0000
Change: 2014-10-28 05:52:57.669657564 +0000 <= unadulterated by touch

루트 접근권한이 없으면 수정이 전혀 불가능하다고 생각합니다 ctime.

관련 정보