루트킷 기술이란 무엇이며 어떻게 사용하나요?
대상에 대한 제어권을 얻은 후에도 여전히 이 제어권을 유지하려고 하므로 트로이 목마 백도어, 루트킷 및 기타 권한을 보호하는 수단이 나타납니다. 먼저, 외국 Sub7, VNC, 넷버스, 국내 Glacier, Gray Pigeon, Black Hole 등과 같은 일반적인 원격 제어 소프트웨어와 같은 일반적인 애플리케이션 수준 트로이 목마 백도어에 대해 이야기하겠습니다. 모두가 이에 대해 잘 알고 있으므로 자세한 내용은 없습니다. 주어질 것이다. 하지만 이런 종류의 백도어는 쉽게 발견될 수 있는데, 현재 대부분의 백신 소프트웨어는 쉽게 탐지하고 대처할 수 있다. 일반 트로이 목마보다 더 나은 일종의 트로이 목마 백도어를 소개합니다. 더 깊은 유형의 트로이 목마 백도어인 루트킷이 숨어 있습니다.
기존 루트킷은 일반 트로이 목마 백도어보다 더 교활한 트로이 목마 백도어입니다. 주로 시스템 파일을 교체하여 목적을 달성합니다. 이렇게 하면 정보가 더 숨겨지고 탐지가 더 어려워집니다. 기존 루트킷은 다양한 플랫폼에서 효과적이지만 주로 Linux, AIX, SunOs 및 기타 운영 체제와 같은 Unix를 대상으로 합니다. 물론 일부 루트킷은 DLL 파일을 교체하거나 시스템을 변경하여 Windows 플랫폼을 공격할 수 있습니다. 루트킷은 권한을 직접적으로 획득하는 것을 허용하지 않습니다. 반대로 다양한 방법을 통해 권한을 획득한 후에만 사용할 수 있는 권한을 보호하기 위한 수단입니다. 시스템 루트 권한 이후(루트 권한은 Unix 시스템에서 가장 높은 권한임) 기사에서 루트킷은 백도어를 구축하고 트랙을 숨겨 공격자가 권한을 유지할 수 있도록 하는 도구 세트를 제공합니다.
다음은 전통적인 Unix용 루트킷의 공격 원리를 설명합니다
RootKits는 백도어를 어떻게 구현합니까? 루트킷 백도어를 이해하려면 먼저 Unix의 기본 작업 흐름을 이해해야 합니다. . Unix에 액세스하면(로컬 로그인이든 원격 로그인이든) /bin/login 프로그램이 실행되고 시스템은 /bin/login을 통해 사용자 계정과 비밀번호를 수집하고 확인합니다. 루트 권한 백도어 비밀번호 bin/login은 시스템의 /bin/login을 대체하여 공격자가 루트 권한 백도어 비밀번호를 입력하여 시스템에 들어갈 수 있도록 합니다. 관리자가 원래 시스템 비밀번호를 변경하거나 비밀번호를 삭제한 경우에도 마찬가지입니다. 우리는 여전히
백도어 비밀번호를 사용하여 루트로 로그인할 수 있었습니다. 침입자는 Unix 시스템에 침입한 후 일반적으로 중요한 데이터를 수집하기 위해 스니퍼를 설치하는 등 일련의 공격 작업을 수행합니다. Unix에는 ifconfig 등과 같이 이러한 작업을 모니터링하는 시스템 파일도 있습니다. 물론 루트킷은 그렇지 않습니다.
일반적으로 루트킷으로 대체되는 시스템 프로그램에는 login, ifconfig, du, find, ls, netstart, ps 등이 포함됩니다. 공간 문제로 인해 이러한 시스템 파일의 기능은 하나씩 나열되지 않습니다. 관심 있는 독자는 스스로 검색할 수 있습니다. 기본적으로 원본 시스템 파일을 대체하기 위해 일부 처리된 시스템 파일이 포함된 루트킷 도구가 많이 있습니다. tOmkit과 같은 일부 루트킷은 상대적으로 좋습니다.
방어 방법: 루트킷은 너무 무서워서 경계해야 합니다. 실제로 루트킷을 방어하는 가장 효과적인 방법은 중요한 시스템 파일의 무결성을 정기적으로 확인하는 것입니다. Tripwire는 매우 훌륭한 파일 무결성 검사 도구입니다. 루트킷의 공격을 받았다는 사실을 알게 되면 문제가 발생하게 됩니다. 보안을 보장하려면 모든 시스템 파일 구성 요소와 프로그램을 완전히 다시 설치해야 합니다.
그러나 이 글을 작성하면 전쟁은 끝난 것 같습니다. 더 무서운 루트킷은 아직 등장하지 않았습니다. 즉, 훨씬 더 무서운(이 단어는 전혀 과장이 아닙니다) 커널 수준의 루트킷입니다. 대부분의 운영 체제(다양한 Unix 및 Windows)에서 커널은 운영 체제의 가장 기본적인 구성 요소이며 네트워크 장치, 프로세스, 시스템 메모리, 디스크 등에 대한 액세스를 제어합니다. 예를 들어, 파일을 열면 파일 열기 요청이 커널로 전송됩니다. 커널은 디스크에서 파일 비트를 가져오고 파일 검색 프로그램을 실행하는 일을 담당합니다.
커널 수준 루트킷을 사용하면 공격자가 기본 시스템을 완전히 제어할 수 있습니다. 공격자는 커널을 수정할 수 있으며 대부분의 커널 수준 루트킷은 실행 리디렉션을 수행할 수 있습니다. 즉, 특정 프로그램을 실행하는 명령을 가로채서 침입자가 선택한 프로그램으로 리디렉션하고 이 프로그램을 실행하는 것입니다. 즉, 사용자나 관리자는 프로그램 A를 실행하려고 하고, 수정된 커널은 프로그램 A를 실행하는 척하지만 실제로는 프로그램 B를 실행합니다. 이제 커널 수준 루트킷이 Unix 시스템을 공격하는 방법을 소개하겠습니다
그리고 기존 루트킷과 달리 Unix bin/login은 수정되지 않았지만 /bin/login(시스템에 로그인할 때 생성됨)을 실행하라는 모든 요청은 공격자가 만든 숨겨진 파일 /bin/backdoorlogin으로 리디렉션되므로 시스템 관리자가 루트킷을 탐지하는 전통적인 방법(파일 무결성을 탐지하기 위해 트립와이어와 같은 소프트웨어를 사용하는 등)은 /bin/login이 변경되지 않았기 때문에 작동하지 않습니다. 같은 방식으로 공격자는 다른 시스템 프로그램도 재설정하여 실제로 침입자가 원하는 대로 작업이 수행되도록 합니다. 즉, 겉으로는 A 프로그램을 실행하고 있고, A 프로그램을 실행하고 있는 것처럼 보이지만 실제로는 침입자가 설정한 B 프로그램을 실행하고 있다는 것입니다~! , 커널 수준 루트킷은 실행 리디렉션을 수행할 뿐만 아니라 많은 커널 수준 루트킷이 파일 숨기기도 지원합니다. 기존 루트킷은 ls 프로그램을 대체하여 파일을 숨기는 반면, 커널 수준 루트킷은 커널을 수정하여 ls 프로그램을 속여서 더욱 교활하게 만듭니다. 또한 커널 수준 루트킷은 프로세스와 네트워크를 숨길 수도 있으므로 사용자는 실제 시스템 상태 보고서를 받지 못합니다.
구현 아이디어: 공격자는 시스템 유형에 따라 커널을 수정하는 방법이 다릅니다. N 유형의 Unix 시스템에서 커널을 수정하는 가장 간단한 방법은 로드된 커널 모듈(LKM)을 사용하는 것입니다. ) 기능을 제공하므로 대부분의 커널 수준 루트킷은 LKM을 활용하여 커널을 동적으로 업데이트하는 동시에 커널과 커널을 사용하는 모든 것에 대한 전체 액세스를 제공함으로써 새로운 기능을 제공합니다.
따라서 많은 커널 수준 루트킷이 LKM을 통해 구현됩니다. LKM을 통해 구현된 커널 수준 루트킷을 설치하는 것은 매우 간단합니다. 예를 들어, Linux에 Knark 커널 수준 루트킷을 설치하려면 루트 권한이 있는 침입자는 insmod knark.o 명령만 입력하면 됩니다. 모듈이 설치된 후 우리가 명령을 입력하기를 기다립니다. 더 좋은 점은 전체 프로세스를 다시 시작할 필요가 없다는 것입니다. LKM을 통해 구현된 루트킷은 Unix에서 매우 인기가 있습니다. 우리는 또한 Windows 플랫폼에 LKM 패치를 적용하여 Windows를 공격하는 경우가 많습니다.
커널 수준 루트킷의 여러 예
현재 사용할 수 있는 커널 수준 루트킷이 많이 있습니다.
1. Linux의 커널 수준 루트킷: Knark
Knark에는 실행 리디렉션을 포함한 다양한 표준 커널 수준 루트킷 기능이 있습니다. , 파일 숨기기, 프로세스 숨기기 및 네트워크 숨기기. 그 외에도 다음과 같은 더 즐거운 기능이 많이 있습니다.
1. 원격 실행: 네트워크를 통해 Knark를 실행하는 머신에 명령을 보낼 수 있으며 소스 주소는 가짜입니다.
명령은 UDP 포트 53으로 전송되어 마치 DNS 트래픽처럼 보입니다. 이 기능을 사용하여 Knark를 업그레이드하거나 시스템 파일을 삭제하거나 기타 원하는 작업을 수행할 수 있습니다.
2. 작업 공격: 프로세스가 시스템에서 실행 중일 때 항상 UID 및 유효 UID(EUID)와 관련된 권한입니다. 또한 프로세스에는 FSUID(파일 시스템 UID)와 관련된 파일 및 디렉터리 액세스 권한도 있습니다. Knark의 작업 공격 기능은 프로세스 UID, EUID 및 FSUID를 실시간으로 변경할 수 있습니다.
프로세스는 이동을 멈추지 않고 갑자기 새로운 권한을 갖게 됩니다.
3. 숨겨진 무차별 모드:
일반 RootKit과 마찬가지로 침입자는 피해자 시스템 스니퍼에서도 실행됩니다. 파일 숨기기 및 프로세스 숨기기를 사용하여 스니퍼를 숨길 수 있습니다. 그러나 이더넷 카드는 무차별 모드로 설정되며 관리자는 이를 확인할 수 있습니다.
Knark는 카드의 무차별 모드를 숨기도록 커널을 수정하여 스니핑을 더욱 은밀하게 만들었습니다.
4. 실시간 프로세스 숨기기:
Knark는 실행 중인 프로세스를 숨길 수 있습니다. 신호 31을 프로세스에 보내면 프로세스는 사라지지만 계속 실행됩니다. kill-31 process_id 명령은 커널이 이 프로세스에 대한 정보를 보고하는 것을 방지합니다. 프로세스가 실행 중일 때 ps 및 lsof 명령은 프로세스를 표시할 수 없습니다.
5. 커널 모듈 숨김: Linux의 lsmod 명령은 당연히 현재 시스템에 설치된 LKM을 나열할 수 있습니다. 이를 허용하기 위해 관리자는 Knark 모듈을 확인하므로 Knark에는 Knark
와 자체를 숨기는 별도의 모듈 modhide가 포함되어 있습니다. 이런 식으로 Knark를 사용하여 시스템을 공격할 때 먼저 Knark.o에 대한 insmod를 만든 다음 modhide.o에 대한 insmod를 만듭니다. 이런 방식으로 누가 lsmod 명령을 실행하든 이러한 모듈은 발견되지 않습니다.
2. Linux의 또 다른 커널 수준 루트킷: Adore
Knark와 마찬가지로 Adore도 있습니다. Linux용 루트킷. LKM RootKit에는 파일 숨기기, 프로세스 숨기기, 네트워크 숨기기 및 커널 모듈 숨기기와 같은 표준 커널 수준 루트킷 기능이 포함되어 있습니다. 우리는 Adore에 루트 액세스 백도어가 내장된 매우 강력한 기능이 있기 때문에 이에 대해서만 논의합니다.
Adore의 루트 권한 백도어를 사용하면 시스템에 연결하고 루트 권한이 있는 명령 셸을 얻을 수 있습니다. 이 기능은 매우 간단합니다. 관리자가 파일, 프로세스 또는 수신 중인 네트워크 포트의 흔적을 볼 수 없기 때문에 이 트릭을 극복하기가 매우 어렵습니다.
방어 방법: 커널 수준 루트킷을 방어하는 기본적인 방법은 공격자가 시스템 시스템(Unix의 경우 루트, Windows의 경우 관리자)의 기본 권한을 얻지 못하도록 방지하는 것입니다. 그러나 이것은 말도 안되는 것처럼 보입니다. ), 현재 커널 수준 루트킷에 대한 절대적인 방어 시스템은 없습니다.
자동 루트킷 탐지 도구도 있지만 그다지 안정적이지는 않습니다. 동시에 커널 수준 루트킷도 지속적으로 개발되고 있으며 이를 방어하는 가장 좋은 방법은 다음과 같습니다. 이를 지원하지 않는 LKM을 사용하십시오. Linux 커널은 LKM을 지원하지 않는 단일 커널로 설정될 수 있습니다.