권한이 555로 설정되었습니다. 다른 사용자가 파일을 어떻게 수정할 수 있나요?

권한이 555로 설정되었습니다. 다른 사용자가 파일을 어떻게 수정할 수 있나요?

저는 Vesta로 Ubuntu 12.04 x64 VPS를 실행하고 PHP로 사이트를 실행합니다. 다음과 같은 코드가 삽입되어 여러 번 해킹되었습니다.

<?php $KoDgalxVvsZfidVcEOTJDeMX='ba'.'se6'.'4_deco'.'de';eval($KoDgalxVvsZfidVcEOTJDeMX("cHJlZ19yZXBsYWNlKCIvN0xna0xnND1IR2JEOGs2WDht....

이 문제를 해결하기 위해 모든 파일의 권한과 소유자를 555 및 루트로 변경하여 사용자가 파일을 변경할 수 없도록 하기로 결정했습니다. FTP 액세스를 제거하고 SSH를 보안하여 VPS에 있는 키만 연결할 수 있도록 했습니다.

이러한 모든 변경에도 불구하고 다른 사용자는 항상 파일을 변경하고, 폴더 이름을 바꾸고, 해킹된 다른 파일을 업로드할 수 있습니다.

내가 무엇을 놓치고 있다고 생각하세요? 어떠한 제안? 감사합니다! 이 문제에 대한 추가 정보가 필요하시면 기꺼이 공유하여 같은 문제로 고통받는 다른 사람들을 도울 것입니다!

답변1

공격자가 시스템에 루트를 얻었습니다. 시스템의 어떤 것도 전혀 신뢰할 수 없습니다. 루트킷으로 수행할 수 있는 작업의 범위는 엄청납니다.

콘텐츠 백업이 어딘가에 있다면 이를 사용하세요. 그렇지 않으면 공격자가 데이터를 엉망으로 만들지 않았기를 바랄 수 있습니다. SQL 테이블을 덤프하고 다른 항목(jpg, pdf, html, 스크립트/php/실행될 기타 항목은 제외)과 함께 복사하세요. 다른 시스템에 복사하거나 다시 업로드할 수 있을 만큼 작은 경우 가정용 컴퓨터에 다운로드하세요.

복사한 내용이 여전히 괜찮은지 확인하기 위해 할 수 있는 모든 조치를 취하세요. (만약을 대비해 jpg가 여전히 모두 유효한 jpg인지 확인하는 것과 같습니다. 바이러스 스캐너를 실행할 수도 있나요?)

손상된 설치를 날려버리세요. 귀하의 서버가 일반적인 호스팅 서비스에서 호스팅되는 경우 호스트의 루트에서도 엉망이 될 수 없는 제어판을 갖도록 설정되어 있기를 바랍니다. 따라서 공격자가 자신이 손상시킨 시스템 외부의 어떤 것도 건드리지 않기를 바랄 수 있습니다. (해당 머신에 설정된 다른 항목에 비밀번호 없이 액세스할 수 있는 경우 이를 확인하세요.)

새로 설치하려면 해야 할 일을 모두 수행하세요. 어쨌든 다시 설치해야 하므로 Ubuntu 14.04 LTS로 이동하는 것이 좋습니다.

손상된 시스템의 코드를 새 시스템으로 복사하지 마십시오. 손상된 시스템에서 나온 모든 데이터는 잠재적인 전염병 보균자처럼 취급되어야 합니다.

Unix 파일 시스템 의미론에서는 파일을 제거하려면 디렉터리에 대한 쓰기 권한이 필요합니다. (파일 이름은 이름에서 inode로의 링크입니다. 하드링크(파일의 다른 이름)를 만드는 시스템 호출은 다음과 같습니다.link(2), 파일을 제거하기 위한 호출은 다음과 같습니다.unlink(2).)

고정 비트가 디렉터리( chmod +t) 에 설정되어 unlink(2)있고 rename(2)연결을 해제하거나 이름을 바꾸려면 호출자가 파일을 소유해야 합니다. (파일에 대한 쓰기 권한에 관계없이). 이는 표준입니다 /tmp( 고정 비트 세트로 세계 쓰기 /var/tmp가능 1777).

rm, 쉘 명령은 다음에 필요합니다.POSIX읽기 전용 파일의 링크를 해제하기 전에 메시지를 표시해야 하지만 해당 경우를 확인해야 합니다. unlink(2)다른 파일에 대해 수행하는 것 보다 실제로 더 많은 작업을 수행할 필요는 없습니다 . 그러므로 이것이 적에게 전혀 영향을 미치지 않는다고 생각하는 것에 속지 마십시오.

가장 가능성이 높은 경우는 웹 서버 프로세스에 대한 제어권을 얻거나 많은 항목에 대한 쓰기 액세스 권한이 있는 사용자 ID로 실행되는 다른 항목이기 때문에 이 중 어느 것도 공격 방어와 관련이 없습니다.

인터넷의 데이터를 처리해야 하는 프로세스에서 쓸 수 있는 내용을 더 많이 제한할수록 공격자가 httpd에 대한 제어권을 획득하는 것에서 데이터를 수정하거나 전체 시스템을 제어하는 ​​것으로 확대될 가능성이 줄어듭니다.

이것이 아파치를 루트로 실행하면 안되는 이유입니다.

답변2

이를 방지할 수 있다면 웹 서버 프로세스를 루트 사용자로 실행해서는 안 됩니다. 이는 웹 서비스의 취약점이 손상되면 서버가 완전히 손상된다는 의미이기 때문입니다.

현재 위치에서는 새 서버에서 처음부터 시작하는 것이 좋습니다. 공격자는 다양한 방법을 통해 지속적인 루트 액세스 권한을 스스로 부여했을 수 있습니다. 보다여기자세한 내용은.

답변3

이러한 모든 변경에도 불구하고 다른 사용자는 항상 파일을 변경하고, 폴더 이름을 바꾸고, 해킹된 다른 파일을 업로드할 수 있습니다.

웹 루트의 상위 디렉터리를 웹 서버를 실행하는 동일한 사용자가 소유한 경우 해당 상위 디렉터리 권한은 하위 파일 및 디렉터리에 설정된 모든 권한을 재정의합니다.

예를 들어, 소유한 디렉터리에서 "터미널" 프로세스를 엽니다. 이제 다음과 같은 파일을 만듭니다 zzz_test.txt.

touch zzz_foo.txt

이제 다음과 같이 파일을 확인하십시오.

ls -la zzz_foo.txt

내 경우에는 권한이 다음과 같습니다.

-rw-r--r--  1 jake  staff  0 Feb 23 19:11 zzz_foo.txt

그런 다음 다음과 같이 실행합니다 chmod.

chmod 555 zzz_foo.txt 

이제 ls -la다시 실행하면 결과는 다음과 같습니다.

-r-xr-xr-x  1 jake  staff  0 Feb 23 19:11 zzz_foo.txt

좋습니다. 권한이 변경되었습니다. 그럼 삭제를 시도하는 것과 같은 "미친" 일을 해보자:

rm zzz_foo.txt

응답은 다음과 같습니다.

override r-xr-xr-x  jack/staff for zzz_foo.txt?

그런 다음 간단히 치고 y누르고 return비올라를 누르세요! 파일이 사라졌습니다.

이것이 단순히 파일 권한을 변경하는 것이 결코 웹 서버를 보호하는 효과적인 방법이 아닌 이유입니다. 웹 서버 작동 방식의 단순성(특히 PHP 기반인 경우)은 웹 서버 사용자가 액세스해야 하는 파일에 대해 항상 읽기 및 쓰기 액세스 권한을 갖는다는 것을 의미합니다. 따라서 단순히 가는 행위는 chmod 555 [some files]악성 코드 및 해킹 시도로부터 자신을 "방어"하는 비효율적인 방법입니다.

지금 무엇을 할 수 있나요? 글쎄, 단순히 권한과 소유권을 변경하는 것만으로는 아무 의미가 없습니다. 더 큰 문제는 PHP 코드베이스가 공격에 취약하다는 것입니다. 따라서 이런 종류의 것들을 정리하는 유일한 효과적인 방법은 PHP 코드를 정리하는 것입니다. 이 사이트가 Joomla!, WordPress 또는 CakePHP와 같은 기본 프레임워크를 기반으로 하는 경우 가장 좋은 조치는 핵심 Joomla!, WordPress 또는 CakePHP 프레임워크를 업그레이드하여 보안을 강화하는 것입니다. 마찬가지로 공격에 취약한 Joomla!, WordPress 또는 CakePHP 플러그인이 있는 경우 해당 플러그인을 업그레이드/패치하여 구멍을 막아야 합니다.

그리고 그 외에도 핵심 시스템 소프트웨어(LAMP(Linux Apache MySQL PHP) 스택이라고 가정)도 최신 상태로 유지하고 패치를 적용해야 합니다.

결국 웹사이트 보안은 일회성으로 끝나는 것이 아닙니다. 이는 반드시 준수해야 하는 전반적인 사고방식 및 유지관리 프로세스입니다. 그렇지 않으면 사이트가 해킹당하면 그 여파로 혼란스러운 상황을 정리하려고 애쓰게 되며 실제로 초기 악성 코드 침입 자체보다 더 많은 피해를 입힐 수 있습니다.

답변4

서버 옵션으로 다시 시작하는 것에 동의하지만 더 많은 보안과 제어를 원한다면 전용 서버를 사용하는 것이 더 좋습니다.

귀하의 상황에 대해 가장 먼저 제안하는 것은 셸 액세스를 제외하고 실행 중인 모든 서비스를 비활성화하는 것입니다. 이는 FTP 서비스, 웹 서버(HTTP), 이메일 등을 중지하는 것을 의미합니다. 그런 다음 셸로 이동하여 해킹당했다고 주장하는 항목이 포함된 폴더로 이동합니다. 그런 다음 다음을 입력하십시오.

ls -al

결과에 다음과 유사한 내용이 표시됩니다.

drwxrwxrwx  2 root root  4096 2014-10-10 00:31 ./

네 번째 항목(또는 특히 세 번째 항목)이 실제로 "루트"인 경우 심각한 문제에 빠진 것이므로 폴더에 따라 다른 사용자로 작업을 실행하도록 웹 서버 구성을 다시 실행해야 합니다. Apache에 대한 mod_rewrite(또는 이와 유사한)를 살펴본 다음 폴더에 대한 모든 요청이 이루어질 때 시스템이 사용자 이름을 변경하도록 그에 따라 Apache 구성 파일(httpd.conf)을 조정해야 합니다. 그런 다음 폴더의 사용자 이름과 그룹 이름을 적절하게 변경하십시오.

문제가 해결되면 문서 루트 폴더(예: public_html)로 이동하고 편집기(pico works)를 사용하여 다음을 입력합니다.

<?php
echo shell_exec("whoami");
?>

그런 다음 who.php로 저장하십시오. 다음으로 웹 서버를 켜고 브라우저에서 웹 사이트 홈 페이지로 이동하여 끝에 who.php를 추가하면 화면에 한 단어만 표시됩니다. 해당 단어가 어근이라면 심각한 문제에 봉착한 것이므로 위의 단계를 다시 수행해야 합니다. 단어가 누구도 아닌 경우 해커가 해당 사용자 이름을 매우 잘 알고 있기 때문에 다소 문제가 발생합니다.

관련 정보