Computer >> 컴퓨터 >  >> 네트워킹 >> 네트워크 보안

Drupal 보안 문제 및 취약점 – 해킹된 Drupal 웹사이트 보호

해킹된 Drupal 웹사이트는 매우 고통스러울 수 있습니다. 이제 해킹에는 여러 가지 이유가 있을 수 있습니다. 그러나 가장 일반적인 것은 맬웨어, 코드 삽입, 스팸 등이 있습니다. Drupal 맬웨어 제거 기술을 찾고 있다면 제대로 찾아오셨습니다. 이 가이드에는 해킹된 웹사이트의 Drupal 파일과 데이터베이스를 정리하는 단계별 지침이 포함되어 있습니다. 멀웨어 및 백도어 탐지도 언급됩니다. 이 기사는 일반 사용자가 쉽게 적용할 수 있도록 구성되었습니다.

Drupal은 오늘날 널리 사용되는 CMS 중 가장 오래되고 가장 안전한 CMS 중 하나입니다. 백만 개 이상의 웹사이트를 지원합니다. 그러나 올해 Drupal에서 여러 취약점이 발견되었습니다. Drupalgeddon이라고 불리는 일련의 RCE 취약점과 매우 유사합니다. 이로 인해 몇 달 안에 Drupal이 여러 번 해킹되었으며 대부분이 암호화폐를 채굴하는 데 사용되었습니다. 그러나 Drupal의 보안 팀은 필요한 패치 업데이트를 릴리스할 만큼 빨랐습니다.

Drupal 해킹:Drupal 해킹의 가능한 결과

  • 민감한 정보를 도용하도록 설계된 피싱 페이지가 웹사이트에 나타납니다.
  • 고객이 악성 리디렉션에 대해 불만을 표시합니다.
  • 로그인, 은행 정보 등과 같은 민감한 정보는 다크넷에서 판매됩니다.
  • 일본어 키워드 해킹 또는 Pharma Hack 등으로 인해 사이트에 횡설수설한 콘텐츠가 나타납니다.
  • 로그인하는 동안 '계정이 일시 중지되었습니다!'라는 메시지가 나타납니다.
  • Drupal 사이트는 검색 엔진에 의해 블랙리스트에 올라갑니다.
  • Drupal 웹사이트가 매우 느려지고 오류 메시지가 표시됩니다.
  • 여러 개의 악성 광고 및 팝업이 사이트에 나타납니다.
  • 사용자가 신뢰 부족으로 사이트 방문을 자제합니다.
  • 사용자 트래픽 및 수익 감소
  • 로그인 데이터베이스에 새로운 Rogue 관리자가 나타납니다.
Drupal 보안 문제 및 취약점 – 해킹된 Drupal 웹사이트 보호 Drupal 보안 문제 및 취약점 – 해킹된 Drupal 웹사이트 보호

Drupal 해킹됨:Drupal 해킹의 예

Drupal 사이트가 해킹당하면 영향을 받는 사용자가 커뮤니티 포럼에서 도움을 받을 수 있습니다. 해킹된 Drupal의 한 예가 아래 이미지에 나와 있습니다.

Drupal 보안 문제 및 취약점 – 해킹된 Drupal 웹사이트 보호

Drupal 보안 문제 및 취약점 – 해킹된 Drupal 웹사이트 보호

드루팔 해킹의 가능한 원인

Drupal 해킹됨:Drupal SQL 주입

Drupal SQLi 취약점은 종종 잘못 코딩된 모듈에서 찾을 수 있습니다. 그러나 코어 내의 SQLi는 매우 드물고 위험합니다. 이러한 위험한 결함은 한때 Drupal 코어에서 발견되었으며 'Drupalgeddon ', Drupal은 PDO를 사용했지만 (PHP Data Object) 정적 SQL 요청과 동적 값을 구분합니다.

$query = $db->prepare("SELECT * FROM users WHERE user = :user AND password = :password");
 $account = $query->execute(array(':user' => $_POST['user'], ':password' => $_POST['password']));

데이터베이스에 도달하기 전에 입력이 적절하게 삭제되므로 모든 것이 괜찮아 보입니다. 그러나 논쟁의 핵심은 Drupal의 자리 표시자 배열에 있었습니다. 이는 데이터베이스 쿼리 구조가 동적으로 변경될 수 있으므로 모듈 개발자에게 유연성을 제공하는 것을 목표로 했습니다.

db_query("SELECT * FROM {node} WHERE nid IN (:nids)", array(':nids' => array(13, 42, 144)));

그 후 :nids 자리 표시자는 제공된 인수의 수와 일치합니다. 다음과 같이:

SELECT * FROM {node} WHERE nid IN (:nids_0, :nids_1, :nids_2)

이 기능은 PHP 색인 생성 배열은 (GET, POST 및 쿠키)와 같은 매개변수를 전달하는 데 사용할 수 있습니다. Drupal 자리 표시자 배열은 기본적으로 $_POST['user']을 가정합니다. 매개변수는 배열이어야 합니다. 그런 다음 원시 배열 문자열 인덱스를 사용하여 새 자리 표시자 이름을 생성합니다. 결과적으로 공격자는 매개변수:와 같은 악성 값을 제공할 수 있습니다. user[0 #], Value:foo. 결과 쿼리는 다음과 같습니다.

SELECT * FROM {users} WHERE user = :user_0 #

따라서 공격자는 로그인 인증을 성공적으로 우회합니다. 게다가 공격자는 매개변수를 user[0; INSERT INTO users VALUES 'MalUser', 'Passw0rd!', 'Administrators'; #] . Drupal의 핵심에 영향을 미치기 때문에 매우 치명적인 결함이었습니다. 더 놀라운 것은 Metasploit 모듈도 이를 악용하기 위해 출시되었다는 것입니다!

Drupal 해킹됨:Drupal 액세스 우회

Drupal 액세스 우회로 인해 사용자가 의도하지 않은 리소스에 액세스할 수 있습니다. 이러한 최신 취약점은 SA-CONTRIB-2018-081로 명명되었습니다. 그 원인은 JSON:API라는 Drupal 모듈입니다. Drupal 8.x용 모듈 8.x-1.x. 주로 다음 용도로 사용됩니다.

  • Drupal 콘텐츠 및 구성 항목에 액세스합니다.
  • Drupal 콘텐츠 및 구성 개체 조작.

이 경우 특정 요청에 응답하는 동안 신중하게 권한을 확인하지 않습니다. 이렇게 하면 권한이 부족한 악의적인 행위자가 민감한 정보를 얻을 수 있습니다. 결과적으로 GET만 이러한 종류의 공격에 사용할 수 있습니다.

Drupal 해킹됨:Drupal 교차 사이트 스크립팅

XSS 및 SQLi와 같은 취약점은 Drupal 모듈에서 상당히 일반적입니다. 이 시리즈의 최신 버전은 SA-CONTRIB-2018-080입니다. 전자 서명 모듈이 XSS에 취약한 것으로 확인되었습니다. E-Sign 모듈은 기본적으로 서명 패드를 Drupal에 통합할 수 있습니다. 이 기사를 작성할 당시 약 875개의 사이트에서 이 모듈을 사용하고 있었습니다. 이 취약점은 서명이 표시될 때 입력 삭제가 부족하여 발생했습니다. 따라서 공격자는 코드를 사용하여 XSS를 테스트할 수 있습니다. . 취약한 서명 필드는 "XSS Found!"라는 메시지를 내보냅니다. 공격자는 이 취약점을 악용하여 다음을 수행할 수 있습니다.

  • 사용자 쿠키를 훔칩니다.
  • 사용자를 리디렉션합니다.
  • Drupal 사이트를 방문하는 동안 최종 사용자의 기기에 멀웨어를 다운로드합니다.

Drupal 해킹됨:Drupal 원격 코드 실행

Drupal 보안은 일련의 Drupalgeddon 버그에 시달리고 있습니다. Drupalgeddon 3는 올해 발견된 가장 최근의 것입니다. 이를 통해 인증되지 않은 사용자가 Drupal 사이트에서 코드를 실행할 수 있습니다. Drupalgeddon 2도 RCE를 허용했지만 . 그러나 이를 악용하기 위해 공격자는 노드를 삭제할 수 있는 능력이 필요했습니다. 전체 URL은 다음과 같습니다.

POST /?q=node/99/delete&destination=node?q[%2523][]=passthru%26q[%2523type]=markup%26q[%2523markup]=whoami HTTP/1.1 [...] form_id=node_delete_confirm&_triggering_element_name=form_id&form_token=[CSRF-TOKEN]

여기서 공격자는 노드를 삭제한다는 명목으로 whoami 명령. 코드의 두 번째 줄은 CSRF 토큰을 확인하는 것입니다. CSRF 토큰은 기본적으로 동일한 서버에서 요청이 생성되었는지 확인합니다. 그 후 공격자는 form_build_id를 검색합니다. 아래 코드와 같이 응답에서:

POST /drupal/?q=file/ajax/actions/cancel/%23options/path/[FORM_BUILD_ID] HTTP/1.1 [...] form_build_id=[FORM_BUILD_ID]

이것은 마침내 익스플로잇과 Whoami의 출력을 촉발합니다. 명령이 표시됩니다. 따라서 공격자는 모든 종류의 명령을 실행하여 서버를 조작할 수 있습니다. 이 RCE 버그를 더 심각하게 만드는 것은 이에 대한 익스플로잇이 이미 릴리스되었다는 것입니다!

해킹된 Drupal 웹사이트 청소:Drupal Malware를 치료하는 단계

감염 감지

Google 진단 사용

Drupal 사이트가 해킹되면 Google과 같은 검색 엔진이 이를 블랙리스트에 올리는 경우가 많습니다. 따라서 Google의 진단 도구를 사용하여 감염 유형 및 원인을 식별할 수 있습니다. Google 투명성 보고서는 이러한 경우에 유용합니다. 확인하려면:

  1. 다음 링크에서 세이프 브라우징 사이트 상태 웹사이트를 방문하세요.
  2. 이 페이지에서 '사이트 상태 확인' 옵션을 찾습니다.
  3. 마지막으로 그 아래에 사이트 URL을 입력하고 '검색' 버튼을 클릭합니다.
  4. 사이트가 감염된 경우 스팸 리디렉션 등에 관한 정보를 제공합니다. Drupal 감염의 원인을 파악하고 제거를 위해 노력하십시오.

사이트 스캔

감염된 페이지를 감지하려면 사이트를 스캔하십시오. VirusTotal과 같은 무료 옵션이 많이 있습니다. 또는 전체 파일을 .zip 파일로 압축하고 스캔을 위해 업로드할 수 있습니다. 그러나 무료 보안 솔루션이 원하는 결과를 얻지 못할 수도 있으므로 맬웨어 제거를 위해 전문가에게 문의하는 것이 좋습니다. .

수정된 파일 확인

종종 Drupal 사이트를 감염시키는 백도어는 Drupal 코어 파일을 수정할 수 있습니다. Drupal 사이트의 파일 수정은 다음 단계를 통해 확인할 수 있습니다.

  1. SSH를 통해 Drupal 사이트에 연결합니다.
  2. mkdir drupal-y.x 명령을 사용하여 새 디렉토리를 만듭니다. 'y'를 Drupal 시리즈, 즉 7,8,9로 바꾸십시오. 'x'를 Drupal 릴리스(예:4.7.1, 2.1.3 등)로 바꾸십시오.
  3. 다음 명령을 사용하여 해당 디렉토리로 이동합니다.
    cd drupal-y.x
  4. 다음 명령으로 Drupal 버전의 새 복사본을 다운로드합니다.
    wget https://github.com/drupal/core/archive/y.x.tar.gz
  5. 이제 다음 명령을 사용하여 tar.gz 파일을 추출합니다.
    tar -zxvf core-y.x.tar.gz
  6. 마지막으로 다음 명령으로 코어 파일 간의 차이점을 비교합니다.
    diff -r core-y.x ./public_html
    또는 SSH를 통해 사이트에 로그인하고 다음 명령을 실행하여 이 작업을 수행할 수도 있습니다.
    find ./ -type f -mtime -20

이 명령은 지난 20일 동안 수정된 모든 파일을 나열합니다. 파일의 수정 날짜를 확인하고 의심스러운 항목이 있으면 해당 파일에 악성 코드가 있는지 검사합니다.

사용자 로그 확인

사용자 로그는 해커가 사이트에 의심스러운 로그인을 했는지 식별하는 데 도움이 됩니다. 이렇게 하려면:

  1. Drupal 사이트의 관리 페이지에 로그인합니다.
  2. 메뉴에서 '사람' 옵션을 클릭합니다.
  3. 이 목록에 있는 사용자를 검토하고 모든 사용자의 '마지막 액세스 시간'도 확인합니다. 의심스러운 로그인을 발견하면 계속해서 사이트의 취약점을 찾으십시오.

감염된 파일 치료 및 난독화된 코드 제거

감염된 페이지가 식별된 후 감염은 부분적(코어 파일의 일부 코드) 또는 전체 파일일 수 있습니다. 파일에 의미 없는 문자가 포함된 경우 대부분의 경우 공격자가 사람이 읽을 수 없는 형식으로 코드를 난독화하는 경향이 있기 때문일 수 있습니다. Base64 형식은 공격자 사이에서 매우 인기가 있습니다. 이러한 코드를 제거하려면:

  1. SSH를 통해 사이트에 로그인합니다.
  2. 그런 다음 다음 명령을 사용하여 base64 코드를 확인합니다.
    find . -name "*.php" -exec grep "base64"'{}'; -print &> hiddencode.txt.
    이 코드는 base64로 인코딩된 코드를 검색하여 hiddencode.txt 안에 저장합니다.
  3. hiddencode.txt의 텍스트를 추가 분석을 위해 이 링크에 있는 것과 같은 온라인 서비스에 업로드하십시오.
  4. 이 사이트에서 '디코드' 옵션을 클릭합니다. 원본 코드가 표시됩니다.
  5. FOPO와 같은 다른 난독화도 온라인 서비스를 사용하여 디코딩할 수 있습니다.
  6. 핵심 패키지의 일부가 아닌 전체 파일에 감염이 있는 경우. 파일을 삭제합니다.
  7. 코어 파일에 부분 감염이 있는 경우 악성코드를 식별할 수 있는 경우 삭제합니다. 그렇지 않으면 주석을 달고 도움을 받으세요.

Drupal 백도어 비활성화

Drupal 백도어는 /modules, /themes, /sites/all/modules 및 /sites/all/themes와 같은 폴더에 숨겨져 있습니다. 코드가 난독화되는 경우가 많기 때문에 이를 감지하는 것은 쉽지 않습니다. 이러한 코드를 찾으려면 위에서 언급한 "감염된 파일 치료 및 난독화된 코드 제거" 단계를 따르십시오. 또한 이러한 백도어는 특정 PHP 기능을 사용합니다.

이러한 기능을 비활성화하려면 다음 단계를 따르십시오.

  1. 사이트에 로그인하고 파일 관리자를 엽니다.
  2. php.ini 파일을 찾아 엽니다.
  3. 해당 파일에 다음 코드를 추가합니다.
    disable_functions = “show_source, system, shell_exec, passthru, exec, popen, proc_open, allow_url_fopen, eval”

드루팔 데이터베이스 정리

Drupal 데이터베이스는 종종 맬웨어의 표적이 됩니다. 감염된 Drupal 사이트의 데이터베이스를 정리하려면 다음 단계를 따르십시오.

  1. 관리자 패널을 통해 Drupal 사이트에 로그인합니다. .
  2. 데이터 액세스>Drupal 데이터베이스로 이동
    Drupal 보안 문제 및 취약점 – 해킹된 Drupal 웹사이트 보호
  3. 여기의 검색 창에서 멀웨어 검사 중에 보이는 의심스러운 링크나 콘텐츠를 검색하세요.
  4. 스팸성 콘텐츠와 링크가 포함된 테이블을 엽니다. 그런 다음 콘텐츠를 수동으로 제거하세요.
  5. 완료되면 사이트가 여전히 작동하는지 확인하고 다른 데이터베이스 관리 도구를 제거합니다.

Drupal Security:공격자 차단

로그인 자격 증명이 손상되지 않았는지 확인합니다. 맬웨어 치료가 완료된 후 Drupal 사이트의 비밀번호를 재설정하십시오. 비밀번호를 변경하려면 Drupal 사이트에 로그인하십시오.

phpMyAdmin 사용

  1. phpMyAdmin이 설치된 경우 cPanel>데이터베이스 상자>phpMyAdmin으로 이동합니다. .
  2. 그런 다음 Drupal 데이터베이스를 선택하고 SQL 탭을 클릭합니다.
  3. 이제 텍스트 필드에 다음 명령을 입력합니다.
    update users set pass=md5(’YOURPASS’) where uid = 1;
  4. 'YOURPASS'를 설정하려는 비밀번호로 바꾸고 마지막으로 Go를 클릭하세요!

Drush 사용

  1. Drush를 통해 사이트를 관리하려면 Drush 모듈이 설치되어 있는지 확인하세요.
  2. Drush를 사용하려면 SSH를 통해 사이트에 연결하세요.
  3. 이제 Drupal-8 사용자의 경우 다음 명령을 실행합니다.
    drush user-password UserName --password="your-new-password".
  4. Drupal-9의 경우 다음 명령을 실행합니다.
    drush user:password UserName "your-new-password"
    여기에서 'UserName'을 Drupal 사이트의 사용자로 바꾸고 'your-new-password'를 설정하려는 비밀번호로 바꿉니다. 비밀번호가 안전하고 알파벳, 숫자 및 문자의 적절한 조합인지 확인하십시오.

Drupal 보안:파일 복원

백업에서 감염된 페이지를 복원합니다. 백업을 사용할 수 없는 경우 새 복사본을 사용하십시오. 파일을 정리한 후 다음과 같은 방법으로 캐시를 지웁니다.

  1. SSH를 통해 Drupal 사이트에 로그인합니다.
  2. 터미널에서 다음 명령을 실행합니다.
    drush cache-rebuild (드루팔 8의 경우)
    또는
    drush cache-clear all (Drupal 7용).

귀하의 Drupal 사이트가 Google 또는 귀하의 호스팅 제공업체에 의해 블랙리스트에 등록된 경우 검토를 위해 사이트를 제출하십시오.

Drupal 해킹 완화

민감한 폴더 보호

민감한 폴더에 대한 액세스를 차단하는 것이 중요합니다. 다음 단계를 통해 수행할 수 있습니다.

  1. 사이트에 로그인하고 파일 관리자를 엽니다.
  2. 보호하려는 폴더 안에 .htaccess라는 새 파일을 만듭니다.
  3. 해당 파일 내에 다음 코드를 삽입합니다.
    Order Deny,Allow
    Deny from all
    Allow from 22.33.44.55
    이 코드 조각은 해당 특정 폴더의 방문자에 대한 액세스를 거부합니다. 여기에서 코드의 마지막 줄은 허용할 IP를 지정합니다. 또한 수정된 .htaccess 파일도 살펴보십시오. 이러한 파일이 발견된 경우 먼저 정리하는 것이 우선입니다.

업데이트 및 백업

최신 버전의 Drupal을 사용하고 있는지 확인하십시오. Drupal 보안 팀은 새로운 업데이트가 있을 때마다 치명적인 결함을 업데이트합니다. 이것은 변경 로그를 사용하여 확인할 수 있습니다. 또한 버그가 있는 코드를 포함할 수 있으므로 평판이 좋지 않은 플러그인을 사용하지 마십시오. 사이트 사본을 만드십시오. 이것은 공격 후 사이트를 복원하는 데 유용할 수 있습니다. 업데이트와 백업은 Drupal 사이트를 보호하는 가장 저렴하고 효과적인 방법입니다.

보안 감사

보안 감사는 Drupal 사이트 내의 중요한 허점을 드러낼 수 있습니다. 모든 웹 관리자가 보안 전문가가 될 수 있는 것은 아닙니다. 따라서 Astra와 같은 서비스는 웹 관리자의 보안을 처리할 수 있습니다. Astra 보안 감사 및 침투 테스트를 통해 사이트의 심각한 위협을 책임감 있게 공개할 수 있습니다.

이를 통해 웹 관리자는 해킹된 Drupal 사이트를 방지하기 위한 예방 조치를 취할 수 있습니다. Astra 보안 감사는 안전한 환경 내에서 실시간 공격을 시뮬레이션하여 사이트에 피해를 주지 않고 동시에 치명적인 취약점을 발견할 수 있습니다. Astra와 같은 보안 감사는 Drupal 사이트 내에서 OWASP Top 10과 같은 일반적인 취약점을 찾을 수 있습니다.

Drupal 멀웨어 스캐너 및 방화벽

매월 Drupal에서 새로운 취약점이 발견됩니다. 그러나 이것이 Drupal 사이트가 안전하지 않다는 것을 의미하지는 않습니다. 방화벽은 Drupal 사이트가 취약하더라도 공격자가 이러한 결함을 악용하는 것을 방지할 수 있습니다. 그러나 시중에 나와 있는 여러 방화벽 중에서 올바른 방화벽을 선택하는 것이 중요합니다. Astra 방화벽은 모든 매개변수에서 눈에 띄는 방화벽입니다. 매우 강력하고 확장 가능합니다. 이것은 작은 블로그든 큰 전자 상거래 사이트든 Astra가 모두 보호할 수 있음을 의미합니다. 또한 Astra는 공격자를 허니팟하고 일반적인 공격을 차단할 수 있습니다.

Astra Drupal 맬웨어 스캐너는 몇 분 안에 해킹된 사이트의 맬웨어를 감지할 수 있습니다. 또한 악성 파일인 경우 버튼 클릭으로 삭제할 수 있는 차이점 파일을 가져옵니다.