CentOS에서 바이너리가 자발적으로 변경됨


2

이것은 약간 걱정이됩니다 : 나는 파일과 디렉토리의 변경 사항을 CentOS 6 서버를 모니터링하기 위해 afick 을 사용 하고 있습니다. 바이너리 파일, 서버로 밀수되는 PHP 스크립트, 변경되는 구성 파일 등의 변경 사항을 감지하고 싶습니다. 매일 실행되며 변경 사항이 감지 된 이메일을받습니다. 일반적으로 웹 코드를 업데이트하거나 새 소프트웨어를 설치 한 후 로그 파일과 변경 사항 만 포함됩니다. 오늘 나는 대박을 치는 것 같았지만 확실하지 않습니다.

수백 개의 파일로 구성된 MD5 체크섬이 변경되었지만 타임 스탬프 나 크기가 변경되지 않은 이메일을 받았습니다. 여기에는 /bin/gawk라이브러리와 같은 실행 파일 도 포함 됩니다 /lib/libasound.so.2.0.0. 이 모든 것은 1 월 1 일 4:00과 1 월 2 일 4:00 사이에 발생했습니다 (약 4시에 실행).

테스트로 백업에서 / bin / gawk를 복원하고 수동 md5 체크섬을 실행했습니다. 실제로 파일이 변경되었습니다. 그러나 두 바이너리 사이의 차이점은 다소 결정적이지 않습니다.

--- old.gawk.hex        2017-01-02 15:56:06.000000000 +0100
+++ new.gawk.hex        2017-01-02 15:56:14.000000000 +0100
@@ -881,12 +881,12 @@
 00003700  a6 03 00 00 00 00 00 00  d1 04 00 00 12 00 0d 00  |................|
 00003710  f0 6d 42 00 00 00 00 00  2a 10 00 00 00 00 00 00  |.mB.....*.......|
 00003720  01 00 00 00 b0 6b 5a 56  65 fd 1b 6d 00 00 00 00  |.....kZVe..m....|
-00003730  00 00 00 00 44 00 00 00  b0 6b 5a 56 b2 04 c4 e2  |....D....kZV....|
+00003730  00 00 00 00 44 00 00 00  56 e5 5d 58 82 a0 c7 cf  |....D...V.]X....|
 00003740  00 00 00 00 00 00 00 00  62 00 00 00 b0 6b 5a 56  |........b....kZV|
 00003750  58 97 65 11 00 00 00 00  00 00 00 00 97 10 00 00  |X.e.............|
 00003760  b0 6b 5a 56 30 fb 60 86  00 00 00 00 00 00 00 00  |.kZV0.`.........|
 00003770  b0 2f 40 83 34 00 00 00  01 00 00 00 00 00 00 00  |./@.4...........|
-00003780  e0 08 65 00 00 00 00 00  e0 1f c8 83 34 00 00 00  |..e.........4...|
+00003780  e0 08 65 00 00 00 00 00  e0 1f 88 0a 35 00 00 00  |..e.........5...|
 00003790  01 00 00 00 00 00 00 00  08 09 65 00 00 00 00 00  |..........e.....|
 000037a0  50 2d 15 83 34 00 00 00  01 00 00 00 00 00 00 00  |P-..4...........|
 000037b0  d0 ff ff ff ff ff ff ff  58 2d 15 83 34 00 00 00  |........X-..4...|
@@ -19806,13 +19806,13 @@
 *
 000501e0  28 00 65 00 00 00 00 00  1e 59 40 00 00 00 00 00  |(.e......Y@.....|
 000501f0  00 00 00 00 00 00 00 00  00 b1 e8 82 34 00 00 00  |............4...|
-00050200  10 cd ec 82 34 00 00 00  50 32 a2 83 34 00 00 00  |....4...P2..4...|
-00050210  80 79 e6 82 34 00 00 00  e0 2f a2 83 34 00 00 00  |.y..4..../..4...|
+00050200  10 cd ec 82 34 00 00 00  50 32 62 0a 35 00 00 00  |....4...P2b.5...|
+00050210  80 79 e6 82 34 00 00 00  e0 2f 62 0a 35 00 00 00  |.y..4..../b.5...|
 00050220  20 87 e7 82 34 00 00 00  20 bc e8 82 34 00 00 00  | ...4... ...4...|
 00050230  20 9f e7 82 34 00 00 00  b0 05 e8 82 34 00 00 00  | ...4.......4...|
 00050240  d0 af e9 82 34 00 00 00  20 5e ed 82 34 00 00 00  |....4... ^..4...|
 00050250  40 7e ee 82 34 00 00 00  40 71 ec 82 34 00 00 00  |@~..4...@q..4...|
-00050260  10 9d e9 82 34 00 00 00  30 6f a1 83 34 00 00 00  |....4...0o..4...|
+00050260  10 9d e9 82 34 00 00 00  30 6f 61 0a 35 00 00 00  |....4...0oa.5...|
 00050270  f0 d7 ec 82 34 00 00 00  60 19 e3 82 34 00 00 00  |....4...`...4...|
 00050280  e0 b1 e9 82 34 00 00 00  10 85 ee 82 34 00 00 00  |....4.......4...|
 00050290  30 84 ec 82 34 00 00 00  40 20 e6 82 34 00 00 00  |0...4...@ ..4...|
(etc)

물론, 나의 첫 번째 생각은 해킹이지만 diff를 보는 것은 나를 놀라게합니다. 실제 코드는 변경되지 않은 것 같습니다. ELF 바이너리에 대한 전문가는 아니지만 공유 라이브러리의 재배치 오프셋 테이블이라고 생각합니다.

그래서 실제로 어떻게 된 것 같아요? 해킹 외에도 내가 생각할 수있는 유일한 다른 가능성은 공유 라이브러리 오프셋이 무작위 화되고 연결된 바이너리도 업데이트되어야하는 '보안'측정입니다. 그런데 왜 지금? 내가 마지막으로 소프트웨어를 설치했을 때는 12 월 23 일이었고 그 사이에는 이상한 것이 없었습니다. 관련 될 수있는 유일한 cronjob은 /etc/cron.daily/prelink이지만, 그렇다면 왜 지금입니까?

답변:


1

설명한 이진 체크섬의 차이는 아마도 사전 연결 때문일 것입니다. CentOS 및 Fedora와 같은 RHEL 기반 Linux 배포판에는 기본적으로 사전 연결이 활성화되어 있습니다. 다음은 2009 LWN.net 기사에서 프리 링크의 개념을 설명하는 방법입니다.

Linux 프로그램은 일반적으로 여러 공유 라이브러리를 참조하는 이진 실행 파일로 구성됩니다. 이 라이브러리는 메모리에 한 번로드되고 여러 실행 파일에서 공유됩니다. 이를 위해서는 동적 링커 (즉, ld.so)가 메모리에서 바이너리를 변경하여 라이브러리 객체의 모든 주소가 메모리의 올바른 위치를 가리 키도록해야합니다. 많은 공유 라이브러리 (예 : GUI 프로그램)가있는 응용 프로그램의 경우 프로세스에 시간이 걸릴 수 있습니다.

사전 연결의 기본 개념은 매우 간단합니다. 동적 링커가 이러한 주소 재배치 작업을 미리 수행하고 결과를 저장하는 데 소요되는 시간을 줄입니다. 프리 링크 프로그램은 ld.so와 거의 같은 방식으로 ELF 바이너리 및 공유 라이브러리를 처리 한 다음 재배치를 설명하는 파일에 특수 ELF 섹션을 추가합니다. ld.so는 사전 연결된 바이너리 또는 라이브러리를로드 할 때 이러한 섹션을 확인하고 라이브러리가 예상 위치에로드되고 라이브러리가 변경되지 않은 경우 훨씬 빠르게 작업을 수행 할 수 있습니다.

그러나 라이브러리가 항상 동일한 메모리 위치에로드되는 경우 공격자는 악의적 인 코드를 사용하여 이러한 위치를 대상으로 시도 할 수 있습니다 . 따라서 주소 공간 레이아웃 무작위 화 옵션을 prelink사용하여 Redhat 배포판이 정기적으로 실행 -R됩니다. 메모리 위치를 변경하면 바이너리 실행 파일의 체크섬이 변경됩니다. 따라서 AIDE와 같은 파일 무결성 검사기를 사용하는 경우 실제로 변경된 유일한 변경 사항이를 통해 ASLR 인 경우 "변경된"바이너리에 대해 경고를받습니다 prelink -R.

참고 문헌 : https://en.wikipedia.org/wiki/Prelink#Linux


고마워, 내 의심을 확인합니다. 남은 유일한 질문은 7 ~ 8 년 동안 사용한 후에 왜 이런 일이 발생합니까?
JvO
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.