리눅스에서 자신이 컴파일 한 바이너리의 실행을 제한하고 싶습니다.
당신이 이것을 성공했다고 가정하십시오. 을 수행 할 경우은 gcc
, ls
이 모두 즉시 작동을 멈추는 것을 인식합니다 (직접 설정 한 경우가 아니면 으로 제한을 설정).
하지만 컴파일러, 어셈블러 및 링커를 포함하여 전체 시스템을 빌드했다고 가정합니다. 이 경우 링커가 링크 된 바이너리에 서명하고 커널이 유효한 서명이 있는지 확인하고 서명이 유효하지 않은 경우 바이너리 실행을 거부하도록 링커와 커널을 수정해야합니다. 코드 서명 here에 대한 자세한 내용을 볼 수 있습니다.
.comment
섹션에는 ELF를 컴파일하는 데 사용되는 컴파일러의 버전과 이름이 포함되어 있습니다.
일반적으로 발생합니다. 그러나 이미 링크 된 실행 파일에 임의의 내용이있는 .comment
섹션을 추가하는 것은 쉬운 일이 아니므로 .comment
의 내용을 제한 할 수는 없습니다 (제한을 생략하지 않는 한).
링커를 변경하지 않고도 내 인생을 쉽게 할 수 있습니까?
예.
나는 당신이 당신의 문제에 대해 당신의 솔루션의 실체에 대해 생각하기 전에 역학에 대해 생각하고 있다고 생각합니다. 당신은 코드 서명을하고 싶지 않는 가정
, 당신은 모든 바이너리에 대한 서명을 생성해야하고 있습니다 : 커널이 서명이 유효한지 확인하는
- 어떤 수단을 가지고 있고,
- 이진에 서명을 첨부하십시오. 이것은 실행하고자하는 모든 바이너리에 대해
foo
과 같은 디렉토리에 foo.signature
을 가지고있는 것처럼 쉽습니다. 또는 objcpy
을 사용하여 바이너리 자체의 서명 부분을 만들 수 있습니다 (바이너리를 이동하는 경우 더 편리합니다).
예 독서 후에도 마찬가지라고 생각합니다. 링커를 변경하지 않고도 내 인생을 쉽게 할 수 있습니까? 어떤 문자열로 일부 섹션을 추가하고 실행하기 전에 문자열을 매치시키기 위해 커널을 조정할 수 있다고합니다. (어디서 얼마나?) – shami
@shami 답변을 업데이트했습니다. –