2010-12-08 6 views
0

DetourXS라는 함수 우회 패키지를 사용하는 코드를보고 있습니다. 내 응용 프로그램은 Microsoft Server 운영 체제를 대상으로합니다. Microsoft Research에도 Detours 패키지가 있으며 작동 방법에 대한 기사가 있습니다. 메모리에로드 된 머신 코드를 패치하고 새로 삽입 된 코드로 무조건 점프하는 코드를 삽입합니다.함수를 우회하는 패키지가 보안을 우회하는 방법

이 코드는 런타임에 기계어 코드를 수정하여 작동하는 경우 운영 체제의 보안 제한 사항을 준수해야합니다. 내가 원하는 모든 것을하기 위해 kernel32와 같은 치명적인 DLL을 수정할 수 있기 때문에 이것은 OS에 심각한 보안 상실이 될 것입니다. 내 이해는 사용자 프로세스가 이미 메모리에로드 된 dll 코드를 수정하려고 시도하는 경우 OS에 의해 중지되어야한다는 것입니다. 이 검사를 활성화/비활성화하려면 Widows Server OS에 설정이 있습니까?

어떻게 이것을 극복합니까?

엔터프라이즈 생산 환경의 모든 응용 프로그램에서 이러한 종류의 우회 패키지를 사용하는 경험이 있습니까?

+0

Microsoft는 Detours를 사용하는 경우 귀하 또는 고객으로부터의 지원 요청을 고려하지 않습니다. 그리고 응용 프로그램이 그것을 사용한다는 사실은 인위적으로 앱이 _marker_ DLL - ** Detoured.dll ** – Andrey

답변

1

우선 중요한 것은 자신의 프로세스의 지침을 수정하는 것입니다. 귀하의 프로세스에서 - 당신은 어쨌든 당신이 원하는대로 할 수 있으며, OS의 관점에서 사용자 공간 코드 (예 : DLL의 코드와 프로세스의 kernel32.dll에있는 코드)에서 아무 것도 우회 할 필요가 없습니다. 보안 관점에서도 마찬가지다. 그 이유는 간단합니다. OS의 해킹 보안은 사용자 공간에서 프로세스의 일부 코드를 변경하는 것과 동일하지 않습니다. OS는 프로세스를 너무 많이 사용하지 않음으로써 보안을 강화합니다 (관리자로 실행하지 않는 한). 보안 목적으로 다른 프로세스의 코드를 수정 (암호와 같은 흥미로운 데이터 또는 권한을 얻는 방법)하는 것이 더 흥미 롭습니다. 그러나 다른 논의의 주제입니다.

두 번째로, detouring은 재부팅없이 중요한 패치를 즉각적으로 패치하는 핫 패칭을 구현하는 방법으로 간주되어 왔습니다. 나는 그것이 현재/마이크로 소프트 (구글 에 따르면 그것은)에 의해 사용/지원되는지 모르지만 표준 프롤로그가 5 바이트의 길이를 가지고있는 것은 우연이 아닙니다 (예, jmp 명령어를 넣는 것이 이상적입니다) .

1

이름에도 불구하고 kernel32.dll은 실제로는 커널 인이 아니며 이 아닙니다. NT 시스템 호출에 대한 Win32 인터페이스를 구현하는 Win32 API 함수에 대한 진입 점이 들어 있습니다.

Windows는 (최신 OS와 마찬가지로) copy-on-write를 지원하므로 det3을 사용하여 kernel32.dll과 같은 공유 DLL을 패치하면 OS는 먼저 자신의 프로세스에 대한 개인용 사본을 만들어 패치합니다. NT 커널 자체는 완벽하게 안전합니다.