2011-04-07 5 views
2

디지털 서명을 사용하여 실행 파일의 무결성을 확인하는 Linux 보안 모듈 작성이 끝났습니다. 이제는 좀 더 깊이 파고 런타임시 파일의 무결성을 확인하고 싶습니다. (즉, 주기적으로 확인하십시오 - 공격자가 시작하고 영원히 실행하는 프로세스를 주로 다루고 있기 때문에) (최소한 시간이 지나면) 식별되지 않고 메인 메모리 내에서 파일을 변경할 수 있습니다.실행 파일의 런타임 무결성 검사

여기의 문제는 파일의 현재 메모리 이미지를 어떻게 확인할 수 있는지 전혀 모른다는 것입니다. 위에 언급 된 나의 인증 방법은 파일이 실행되기 전에 mmaped 될 때마다 호출되는 mmap-hook을 사용합니다. 그러나 LSM 프레임 워크가 정기 검사를위한 도구를 제공하지 않는다는 것을 알고있는 한.

그래서 내 질문 : 내가 어떻게 시작하는지 어떤 힌트가 있습니까? 메모리 이미지를 읽고 그 무결성을 어떻게 확인할 수 있습니까?

+0

힙, 스택 공간, malloc의 메모리 등에 변수를 만들고 저장하는 응용 프로그램을 어떻게 처리 할 것을 제안합니까? – fpmurphy1

+0

메모리의이 부분은 동적이기 때문에 일단 프로그램이 실행되면이 부분을 확인하는 좋은 방법이 없다고 가정합니다. 아마 고정 된 부분을 고수하고 침입자가 그곳에서 아무 것도 변경하지 않았는지 확인해야합니다. – Chris

+0

보안 모듈이 HLOS 또는 커널에 있습니까? 커널의 경우 vmalloc 대신 kmalloc을 사용하여 주소가 연속적인지 확인하십시오. –

답변

1

난 당신이 뭘 하려는지 이해 주셔서 감사합니다,하지만 난이 당신에게 이유없이 따뜻하고 퍼지 느낌을 제공하는 보안 기능이 될 수 있다는 것을 정말 걱정; 그것들은 가장 위험한 종류의 보안 기능입니다. (이것에 대한 또 다른 예는 당신의 옆에 앉아있는 LSM 일 수도 있지만, 나는이 의견에 소수에 속한다고 생각한다.)

프로세스의 프로그램 데이터 만이 영향을 미치는 것은 아니다 그것의 행동. 스택 오버플로는 악의적 인 코드가 스택에 쓰여지고 점프하여 원본 프로그램 텍스트를 무결성 검사합니다. 공격자가 원래의 변경되지 않은 프로그램 텍스트 to his advantage을 사용할 수 있다는 사실은 말할 필요도 없습니다.

또한 커널 내부에서 지속적으로 DSA를 계산할 경우 성능 문제가 발생할 수 있습니다. 그리고 나중에 더 많은 권한을 가진 커널 코드 목록에 추가 할 것입니다.

어떤 경우 든 질문에 답할 수 있습니다. 타이머를 사용하여 각 프로세스를 홉핑하고 무결성을 검사하는 커널 스레드를 인스턴스화하는 커널 모듈을 작성할 수 있습니다. 이는 각 프로세스의 페이지 테이블을 사용하고, 읽기 전용 페이지에 매핑하고, 무결성 검사를 통해 수행 할 수 있습니다. 하지만 각각의 메모리 페이지가 아마도 자체 서명을 가질 필요가 있기 때문에이 방법을 모두 연결하지 않으면 작동하지 않을 수 있습니다.

주의 할 점은 공유 라이브러리는 스윕 당 한 번만 무결성 검사를 받아야한다는 것입니다. 스니핑 당 하나의 라이브러리가 사용되는 모든 프로세스에서 다시 매핑되기 때문입니다. 이 기능을 구현하려면 세련미가 필요합니다. 따라서 디자인의이 "멋지는"섹션에서이 기능을 사용할 수도 있습니다.

이것이 좋은 생각이 아닐 수도 있다는 나의 논리에 동의하지 않는다면, 나는 당신의 생각에 매우 흥미가있을 것입니다. 나는 얼마 전 직장에서이 생각을 접했고 우리의 토론에 신선한 아이디어를 가져다주는 것이 좋을 것입니다.

+0

당신의 생각에 감사드립니다, 나는 마지막으로 약간의 연구를 했었습니다. 그리고 그것은 실제로 합리적인 보안 기능이 아닌 것 같습니다.이미 버퍼 오버 플로우 공격은 이미 존재하는 코드를 변경하지 않고 사용할 수있는 한 가지 이유를 이미 명명 했으므로 이러한 시스템은 효과적으로 실행하려면 커널보다 높은 권한이 필요하므로 기존의 모든 솔루션은 하드웨어 (예 : TPM 모듈) 또는 무결성 검사가 VMM으로 실행되는 가상 시스템 – Chris

+0

TPM은 RoT (신뢰의 루트)를 설정하는 1 가지 방법이며 다른 방법이 있습니다. TCG의 TPM 버전은 현재 2.0이지만 현재까지 시장의 상당 부분이 여전히 1.2를 수행하고 있지만 2.0은 더 나은 선택이 될 수 있습니다. –