c++ - 켜기 - 윈도우8 디펜더 끄기




보호 된 바이러스 백신 프로세스 종료 (2)

나는 ESet 바이러스 백신을 사용하고 있으며 최근에 GUI 프론트 엔드 egui.exe가 멈추어 50 % CPU (즉, 1 코어의 100 %)를 사용하고있었습니다. 놀랍게도 나는 디버그 권한을 활성화하여도 그것을 죽일 수 없다는 것을 알았다.

이제 저는 궁금합니다. 어떻게 그러한 방어를 구현합니까? 그리고 커널 드라이버를 작성하지 않으면 죽일 수있는 방법이 있습니까?

egui.exe 프로세스는 일반 사용자 (비 관리자)에서 실행되며 관리자 계정을 사용하여 다양한 방법으로이를 삭제하려고 시도합니다. 여기 내가 시도한 것이있다.

  • 당신은 작업 관리자에서 그것을 죽일 수 없다.
  • 당신은 pskill을 사용하여 그것을 죽일 수 없다.
  • 당신은 프로세스 탐색기를 사용하여 그것을 죽일 수 없으며 디버거를 붙일 수 없다.

그런 다음 몇 가지 프로그래밍을 시작했고 다음을 발견했습니다.

  • 권한이없는 사용자는 PROSESS_TERMINATE 액세스로 열 수 있지만 TerminateProcess ()에 대한 실제 호출은 오류 5와 함께 실패합니다.

  • 관리자 계정에서 원하는 디버그 권한을 설정 한 후에 원하는 액세스 권한으로 열 수 있지만 TerminateProcess (), GetKernelObjectSecurity (), SetKernelObjectSecurity ()에 대한 호출은 모두 오류 5와 함께 실패합니다.

이것은 Terminate가 DACL에 없으면 처음부터 PROCESS_TERMINATE를 사용하여 프로세스를 열 수 없기 때문에 프로세스 DACL을 설정하는 것 이상의 일종의 비웃음을 분명히 지적합니다. 실제로 Win32 API 호출을 가로 채고 있습니까? 그렇다면 어떻게? 낮은 수준의 시스템 프로그래밍을 한 지 오래되었으므로 내 무지를 용서해주십시오.


Joanna Rutkowska가 "System Virginity Verifier"를 확보 할 수 있다면, 이것은 그들이 당신의 후크를 구현하는 에서 꽤 좋은 아이디어를 줄 것입니다. 유사한 도구 ( GMER 포함)를 사용하여 시스템의 내부에서 일어나는 일을 조사 할 수 있습니다. 이상하게 들릴지도 모르지만 때로 AV는 악의적 인 소프트웨어에서 흔히 볼 수있는 기술, 즉 루트킷 기술을 사용하여 소프트웨어를 속일 수 없도록 보호합니다.

SSDT-Hooking과 비슷한 기술로 프로세스를 "보호"하는 데 사용되었습니다. 이 첫 번째 시도는 프로세스의 모든 스레드를 일시 중단하는 것입니다. 대부분의 그러한 맬웨어 방지 및 맬웨어 방지 메커니즘은 종료 시도시에만 트리거됩니다. 그러나 일단 모든 스레드를 일시 중단하면 (Process Explorer에서 수행 할 수 있음) 아무 것도 스케줄러에서 더 이상 예약하지 않으므로 (CPU 사용률에 못 미침)

SSDT (때때로 SDT)는 System Service Descriptor Table의 약자입니다. 시스템 서비스의 기능 주소 (색인이되는 시스템 서비스의 번호)가있는 테이블입니다. Win32 응용 프로그램에서 CreateFile 과 같은 것을 호출하면 NTDLL에서 NtCreateFile (== ZwCreateFile , UM)을 호출하게됩니다. 거기에서 Windows 2000 / XP 이후로 변경된 메커니즘은 커널 모드 (KM)로 변환되는 방식이 달라집니다 (별칭 "링 0"). 어쨌든 NTDLL에서 NtCreateFile 을 구현하면 대략적으로 다음과 같은 작업이 수행됩니다. 시스템 서비스의 인덱스를 레지스터로 이동 한 다음 KM (새로운 구현에서 sysenter opcode)으로 전환하는 데 사용되는 메서드를 호출합니다. KM에 도착하면 처리기는 인덱스를 확인하고 SSDT에서 함수 주소를 찾아내어 해당 함수를 호출합니다. 여기 UM 스택에 대한 점검이 더 있습니다 (UM에서 왔을 때). 그러나 이것은 간단한 과정입니다. 따라서이 수준에서 기능을 연결하면 Win32 하위 시스템을 포함한 모든 하위 시스템이 작업을 수행하지 못하게 할 수 있습니다. 그러나이 문제에는 몇 가지 문제가 있습니다. 대부분의 구현자는 악성 소프트웨어에서 자주 볼 수있는 나쁜 일을합니다. 예를 들어 소니가 2005 년에 일부 오디오 CD를 넣기로 선택한 루트킷과 같은 것입니다. 따라서 버그 확인과 여러 가지 독립적 인 코드 연결을 위험에 빠뜨리지 않고도 실행 해제가 사실상 불가능합니다 SSDT 인덱스는 일반적으로 구현 자의 일부가 무모함으로 인해 문제가 발생합니다.

ESET 드라이버의 세부 사항을 모르는 상태에서도 물론이 질문은 일종의 개방적 일지라도 스레드를 일시 중단하는 것은 가능성이 있습니다. 그러나, 만약 그것들이 또한 예방된다면, 당신은 정말로 스위칭 제품을 고려해야 만합니다. 이러한 제품의 시스템 안정성에 대한 단점은 추가로 "보호"를 능가하지만 (ESET) 그렇지 않은 경우에는 말하기를 권합니다.

또 다른 가능한 방법은 코드를 삽입 (예 : DLL을 통해)하고 프로세스 자체가 ExitProcess 호출하도록하는 것입니다. 이것은 또한 그들의 훅이이 허점을 허용하는지 여부에 달려 있습니다.


다음과 같이 다른 경우가있을 수 있습니다.

  1. kill하려고하는 프로세스의 자식 스레드가 일부 커널 객체에서 대기 중이면, 대기가 완료 될 때까지 종료되지 않습니다. 이로 인해 응용 프로그램이 응답하지 않을 수 있습니다. 프로세스의 모든 스레드는 종료 표시가됩니다. 프로세스 종료 단계 중 하나입니다.
  2. 방화벽, AV 및 기타 보안과 관련된 이러한 지능형 소프트웨어는 커널 후크 (일명 후킹 - API 개체, 커널 개체 또는 소프트웨어 구성 요소간에 전달되는 메시지 또는 이벤트를 가로 채기)를 설치합니다. 그들은 항상 외력을 보호하기위한 방어막을 가지고 있습니다.

ERROR_ACCESS_DENIED을 (를) 받고 있습니다. 어떤 단계를 거쳤는지 모르지만 다음과 같이 제안 할 수 있습니다.

  1. 작업 관리자를 열고 프로세스 탭으로 이동하십시오.
  2. egui.exe를 오른쪽 클릭하고 Properties를 클릭하십시오;
  3. 보안 탭을 클릭 한 다음 편집을 클릭하십시오.
  4. 권한 창에서 자격 증명을 확인하십시오.
  5. 사용자를 추가하거나 전체 권한을 설정하십시오.

당신이 그것을하려고 할 수 있습니다. 왜냐하면 당신이 당신의 앱을 개발할 때조차도 당신이 시도한 것입니다. 나는 당신의 계정의 자격을 사용할 것입니다.







driver