문제

보안상의 이유로 그것은 바람직의 무결성을 확인하기 위한 코드를 실행하기 전에, 을 피하는 훼손된 소프트웨어 에 의해 공격자.그래서 제 질문은

명하는 방법 실행 코드와 실행을 신뢰할 수 있는 소프트웨어 리눅스에서?

저는 작품을 읽는 반고 운명 et al., 디자인과 구현의 서명된 실행파일 리눅스, 며,IBM TLC (신뢰할 수 있는 리눅스 클라이언트)를 통해 새퍼드&Zohar.TLC 사용하는 TPM 컨트롤러,어떤 것은 좋은,하지만 종이에 2005 년 그리고 나를 찾을 수 없는 현재 대안입니다.

당신이 알고 있는 또 다른 옵션?

업데이트:에 대해 다른 OS?OpenSolaris?BSD 가족이 있는가?

도움이 되었습니까?

해결책

그만큼 디지시기 커널 모듈은 bsign. 그러나 Linux 커널의 버전 2.6.21 이후에는 아무런 작업이 없었습니다.

다른 팁

나는 이것이 고대 질문이라는 것을 알고 있지만 지금은 그것을 발견했습니다.

나는 Linux 커널 (버전 2.4.3)에 대한 서명 된 실행 지원 지원을 잠시 후에 작성했으며, 실행 파일에 서명하기 위해 전체 툴체인을 설치하여 서명을 확인했습니다. execve(2) 시간, 서명 검증 정보를 캐싱 (파일을 작성하거나 다른 수정을 위해 파일을 열 때 유효성 검사를 지우기), 서명을 임의의 ELF 프로그램에 포함시키는 등 모든 프로그램의 첫 실행시 몇 가지 성능 페널티를 도입했습니다 (커널이 커널을 도입했습니다. 에로드해야했습니다 전체 파일은 필요한 페이지를 요구하는 것이 아니라 시스템이 정상 상태에 있으면 잘 작동했습니다.

그러나 우리는 복잡성을 정당화하기에는 너무 큰 몇 가지 문제에 직면했기 때문에 추구를 중단하기로 결정했습니다.

  • 우리는 아직 지원을 구축하지 않았습니다 서명 된 도서관. 서명 된 라이브러리는 또한 수정해야합니다 ld.so 로더와 dlopen(3) 기구. 이것은 불가능하지는 않았지만 인터페이스를 복잡하게 만들었습니다. 로더가 커널에 서명을 검증하도록 요청해야합니까, 아니면 계산을 사용자 공간에서 완전히 수행해야합니까? a로부터 어떻게 보호 할 것인가 strace(2)D 프로세스 유효성 검사 의이 부분이 사용자 공간에서 수행되는 경우? 우리는 금지해야 할 것입니다 strace(2) 전적으로 그러한 시스템에?

    우리는 무엇에 대해 무엇을 할 것인가 자체 로더를 공급하는 프로그램?

  • 많은 프로그램이 엘프 객체에 컴파일하지 않는 언어로 작성됩니다. 우리는 제공해야합니다 언어 별 수정 bash, perl, python, java, awk, sed, 그리고 각 통역사가 또한 서명을 확인하십시오. 이러한 프로그램의 대부분은 자유 형식의 일반 텍스트이므로 ELF 객체 파일에 디지털 서명을 포함시킨 구조가 부족합니다. 서명은 어디에 저장됩니까? 스크립트에서? 확장 된 속성에서? 서명의 외부 데이터베이스에서?

  • 많은 통역사입니다 넓은 개방 그들이 허용하는 것에 대해; bash(1) 원격 시스템과 통신 할 수 있습니다 전적으로 그 자체로 사용 echo 그리고 /dev/tcp, 그리고 공격자가 필요로하는 모든 것을 실행하는 데 쉽게 속일 수 있습니다. 서명 여부에 관계없이 해커를 통제 한 후에는 신뢰할 수 없었습니다.

  • 서명 된 실행 파일 지원을위한 주요 동기 부여는 시스템이 제공하는 시스템을 대체하는 Rootkits에서 제공됩니다. /bin/ps, /bin/ps, /bin/kill, 등등. 예, 실행 파일에 서명 한 다른 유용한 이유가 있습니다. 그러나 Rootkits는 시간이 지남에 따라 훨씬 더 인상적이었습니다. 핵심 관리자로부터 활동을 숨기려고 해킹합니다. 커널이 해킹되면 전체 게임이 끝났습니다. Rootkits의 정교함의 결과로 우리가 사용하지 않기를 바라는 도구는 해킹 커뮤니티에서 호의를 얻지 못했습니다.

  • 커널의 모듈로드 인터페이스가 넓게 열렸습니다. 일단 프로세스가 있습니다 root 권한은 확인없이 커널 모듈을 주입하기가 쉽습니다. 커널 모듈에 대한 또 다른 검증자를 작성할 수도 있었지만 모듈 주변의 커널 인프라는 매우 원시적이었습니다.

GNU/Linux/Foss 모델은 실제로 변조를 장려합니다. 사용자와 배포 요원은 자신의 요구에 맞게 소프트웨어를 자유롭게 수정 (변조) 할 수 있어야합니다. 사용자 정의를 위해 소스 코드를 변경하지 않고 소스 코드를 변경하지 않아도 자주 수행되지만 이진 코드 서명을 중단 할 수 있습니다. 결과적으로 바이너리 코드 서명 모델은 GNU/Linux/Foss에 특히 적합하지 않습니다.

대신, 이러한 종류의 소프트웨어는 소스 패키지의 서명 및/또는 보안 해시를 생성하는 데 더 의존합니다. 신뢰할 수 있고 신뢰할 수있는 패키지 배포 모델과 함께 이진 코드 서명처럼 보안 (소스 코드에 대한 투명성에 대한 보안)처럼 보안을 만들 수 있습니다.

이것을 살펴보십시오 : http://linux-ima.sourceforge.net/

아직 서명하지는 않지만 여전히 확인을 가능하게합니다.

Solaris 10 & 11 OS 관점에서 질문에 대답 할 수 있습니다. 모든 바이너리가 서명됩니다. 서명을 확인하려면 'elfsign'...

$ elfsign verify -v /usr/bin/bash
elfsign: verification of /usr/bin/bash passed.
format: rsa_sha1.
signer: O=Oracle Corporation, OU=Corporate Object Signing, OU=Solaris Signed Execution, CN=Solaris 11.
signed on: Fri Oct 04 17:06:13 2013.

Oracle은 최근 Solaris 11에 대한 검증 된 부팅 프로세스를 추가했습니다. 자세한 내용은 - Solaris 검증 부팅 소개

Opensolaris 코드의 일부 생산 등급 포크가 있으며, 조사 할 가치가있는 것은 Illumos, Smartos 및 Omnios입니다.

보세요 메두사 DS9. 나는 그것을 길게 놀았다 () 시간 전, 그러나 내가 올바르게 기억한다면, 특정 바이너리를 등록 할 수 있으며 커널 수준에서는 수정이 허용되지 않았습니다. 물론, 기계에 로컬 액세스를 통해 재정의 할 수는 있지만 실제로는 쉽지 않았습니다. Constable이라는 스마트 데몬이 있으며 기계에서 발생하는 모든 것을 확인하고 평범한 일이 발생하면 비명을 지르기 시작합니다.

나는 그것을 시도한 적이 없지만 다음을 살펴 봅니다. http://blog.codenoise.com/signelf-digitally-signing-elf-binaries. 이 솔루션은 커널 지원없이 작동하며 갈 준비가 된 것 같습니다.

서명자의 코드를 찾을 수 있습니다 http://sourceforge.net/projects/signelf/

"Linux에서 신뢰할 수있는 코드 만 실행"질문을 해결하지는 않지만 프로그램이 가능한 변조/손상을 감지 할 수있는 방법을 만들어 문제를 부분적으로 해결합니다.

http://en.wikipedia.org/wiki/pkcs

PKCS7 (S/MIME) 표시를 사용하십시오. 나만의 인증서/개인 키 쌍을 생성하고, 인증서를 자체 서명 한 다음 PKCS7을 사용하여 개인 키와 인증서와 파일에 서명하십시오. 인증서를 첨부 한 다음 OpenSSL 명령 (Man Smime 또는 OpenSSL 도움말을 사용하여 런타임에 자체적으로 확인할 수 있습니다. 공개 키가 귀하가 제공하는 파일에도 해당 공개 키의 S/MIME 서명은 배포하지 않는 개인 키로 만 생성 할 수 있기 때문에 이는 방지 기능입니다. 따라서 파일이 귀하의 Cert에 의해 서명 된 경우 개인 키를 가진 사람이 서명 했어야하며 개인 키를 다른 사람에게주지 않았으므로 귀하에게서 온 것이어야합니다.

자체 서명 된 인증서를 만드는 방법은 다음과 같습니다.

http://www.akadia.com/services/ssh_test_certificate.html

OpensSL을 권위의 근본 (-Cafile)으로 신뢰 한 다음 루트로 확인한 다음 파일의 인증서를 확인하고 해시를 확인해야합니다. 문서화되지는 않지만 OpenSSL의 종료 상태는 Smime Verife를 수행 할 때 확인하는 부호의 유효성을 반영합니다. 일치하는 경우 0이면 0이지만 0이 아닌 경우 0입니다.

수표가 코드에있는 경우이를 이길 수있는 경우 수표를 제거 할 수 있으므로이 모든 것이 안전하지 않습니다. 이를 수행하는 유일한 방법은 OS에 체커를 갖고 이진을 점검하고 서명되지 않은 경우 실행을 거부하는 것입니다. 그러나 OS에 체커가없고 Linux를 수정하여 어쨌든 제거/우회 할 수 있기 때문에 ... 이것이 실제로 좋은 것은 사람들이 당신을 우회하지 못하게하는 것보다 손상된 파일을 감지하는 것입니다.

동의 철학을 둘러싼 리눅스,GNU et al.의 주위에 회귀한니다.다른 한편으로는 또한 일부 시스템을 받을 자격이 취약점에 대한 보호 등과 같은 소프트웨어 변경할 수 있는 훼손 개인 정보 보호와 무결성 시스템의 사용자에게 달려 있습니다.

커널 구현하지 못하는 급속한 발전 사이클의 커널은 자체입니다.내가 추천하는 대신 구현 형식의 실행 파일을 서명 검증을 사용하여 사용자 도구입니다.위치 실행파일에 아카이브나 파일 시스템 이미지와 로그인을 사용하여 이미지 개인 키;는 경우에는 개인 키에 유지 개발기(전용),할 때 당신의 서버를 해킹 공격자는 여전히 방법이 없다인은 자신의 이미지 및 주사 그들의 코드없이 속 시스템을 마운트 서명되지 않은 이미지입니다.그것은 더 늘 함께 체인:

  • 귀하의 서비스가 포함된 런타임으로 장착 읽기 전용 이미지
  • 는 기계의 떨어져 서명하고,읽기 전용 파일 시스템;
  • 을 구현하 보안 부팅 컴퓨터에서 실행되는 부트로더의 무결성을 강제 적용합니다 부팅 미디어
  • 신뢰하는 조직에서 사람들이지 않을 것이 변조의 기계입니다.

모든 권리는 열심히 노력이다.그것은 훨씬 간단하게 작업하여 모든 시스템을 설계에서 또 다른 방법:

  • 검역소에서 사용자 시스템입니다.지 않을 소개하는 의미에 대한 사용자는 명령을 실행하신 시스템입니다.피 벗기기 내에서 프로그램에 의존하는 사용자 공급 데이터입니다.
  • 디자인의 배포 절차를 사용하여 구성 및 관리하도록 당신의 배포는"반복 가능한"것을 의미들이 같은 기능적인 결과를 배포할 때에 그들에게 여러 번입니다.이것은 당신을"핵 궤도상에서"컴퓨터로 의심되는 손상되었다.
  • 치료의 기계럼 그들이 손상되었다:정기적으로 실행하는 감사의 무결성을 확인하기 위해 귀하의 시스템입니다.저장 데이터에는 별도의 이미지하고 재배포하는 시스템 정기적으로 한다.Sign 이미지와 시스템을 거부 서명되지 않은 이미지입니다.
  • 인증서를 사용:호의"인증서 고정"접근 방식이다.배포하는 루트 인증서의 응용 프로그램(을 제공하는 자동적인 거부의 서명되지 않은 인증 기관)하지만 적어도가 있는 시스템 관리의 지문을 현재에 이미지와 관리자에게 통지하 때문이 변경되었습니다.하지만 그것을 구현하는 것이 가능하다 모든 이를 사용하여 체인의 키,인증-인증을 기반으로 설계되었습니다 이를 위해 정확한 응용 프로그램.

나는 보안을 체인으로 생각하고 싶습니다. 체인의 약한 링크는 전체 시스템을 손상시킬 수 있습니다. 그래서 모든 것이 "무단 사용자가 루트 암호를 얻지 못하도록 방지합니다".

@danmoulding에서 제안한 바와 같이 소프트웨어 소스도 중요하며 미래에 공식 OS 응용 프로그램 저장소가 표준이 될 것입니다. Play Store, Apple 또는 Microsoft 매장에 대해 생각해보십시오.

은밀한 악성 코드의 설치 및 배포가 훨씬 교활한 문제라고 생각합니다. 결국, 불량 코드를로드하려면 먼저 시스템 어딘가에 설치해야합니다. 물론 더 많은 보안 계층이 일반적으로 더 좋습니다. 문제는 다음과 같은 가치가 있습니까?

제 생각에는 대답은 "그것은 의존한다"입니다. @sleblanc가 제안한대로 일련의 보안 정책을 채택하여 위험을 줄일 수 있습니다. 파일 시스템을 암호화 할 수 있습니다 (https://en.wikipedia.org/wiki/linux_unified_key_setup), 바이너리에 읽기 전용 파일 시스템을 사용하거나 메커니즘을 사용하여 바이너리에 서명하고 확인하십시오.

그러나 사용하는 메커니즘은 공격자가 루트 액세스를 얻으면 할 수있는 일이 없습니다. 서명 검증 도구는 변조 버전으로 대체하거나 비활성화 할 수 있으며 기계가 손상된 후에 도구가 사용자 공간이나 커널 공간에서 실행되는 경우에는 중요하지 않습니다 (후자는 물론 더 안전 할 것입니다. ).

따라서 Linux 커널이 루트 사용자와 운영 체제 사이에 서명 검증 모듈과 다른 보안 계층을 포함시킬 수 있다면 좋을 것입니다.

예를 들어 이것은 최근에 채택 된 접근법입니다. 맥 OS 버전. 루트 계정에서도 일부 파일을 수정할 수 없으며 때로는 읽기) 정책 및 커널 모듈에도 제한 사항이 있습니다 (예 : 서명 또는 승인 된 KEXT 만 시스템에로드 할 수 있음). 다소 동일한 접근 방식을 채택했습니다 Applocker.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top