Linux 서버가 해킹되었는지 어떻게 알 수 있습니까?


36

리눅스 서버가 해킹되었다는 이야기는 무엇입니까? 감사 보고서를 예약하여 생성하고 이메일로 보낼 수있는 도구가 있습니까?


1
상태를 알 수 없으면 실제로 방법이 없습니다. 그렇기 때문에 신뢰할 수있는 설치 소스를 사용하고 Tripwire와 같은 도구를 설정하는 것이 중요합니다.
Oskar Duveborn


10
당신은 "금이"를 의미합니다. 해킹은 처음에 리눅스를 얻는 방법입니다.
gbarry

서버가 우리와 함께 호스팅 된 내 친구가 한 번 이상한 점이있는 것처럼 그의 서버를 보도록 요청했습니다. 통나무를 보자 마자 뭔가 일어났다는 것을 알았습니다. 그들은 트랙을 덮으려고 노력했고 루트 키트를 설치했지만 약간 혼란 스러웠습니다. 어쨌든 짧은 이야기를 줄이려면 전체 서버를 처음부터 다시 작성해야했습니다. 밤새 걸리고 보안 감사 도구를 구성했습니다.
Matt

@Matt Mind는 어떤 도구를 말합니까? 오늘도 여전히 같은가요?
Rodrigo

답변:


34
  1. 깨끗한 사본 그들의 md5sum이 함께 어딘가 (예 : LS, PS, NETSTAT, md5sum이 같은) 중요한 시스템 파일을 정기적으로 라이브 버전을 비교합니다. 루트킷은 이러한 파일을 항상 수정합니다. 원본이 손상되었다고 생각되면이 사본을 사용하십시오.
  2. aide 또는 tripwire 는 데이터베이스가 변경되지 않았다고 가정하여 수정 된 파일을 알려줍니다.
  3. 침입자가 조작 할 수없는 원격 로그 서버로그 파일을 보내도록 syslog를 구성하십시오 . 의심스러운 활동이 있는지 원격 로그 파일을보십시오.
  4. 로그를 정기적으로 읽으십시오 - 중요한 정보를 종합 하려면 logwatch 또는 logcheck 를 사용 하십시오.
  5. 서버를 알고 있어야합니다 . 어떤 종류의 활동과 로그가 정상적인 지 파악하십시오.

8
md5는 버리지 않으면 심하게 약화되었습니다. sha512로 이동할 수 있습니다.
Broam

12

당신은하지 않습니다.

나는 알고있다-그러나 그것은 편집증, 슬픈 진실이다.;) 물론 많은 힌트가 있지만, 시스템이 구체적으로 타깃팅 되었다면-말하기가 불가능할 수도있다. 아무것도 안전하지 않다는 것을 이해하는 것이 좋습니다. 그러나 우리는보다 안전하게 작업해야하므로 대신 다른 모든 대답을 지적 할 것입니다.)

시스템이 손상된 경우 진실을 밝히기 위해 시스템 도구를 신뢰할 수 없습니다.


5
당신은 공격자가 어떤 기술을 가지고 있고, 어떤 식 으로든 은밀하고 싶어하며, 스팸을 폭파하고 OC3을 봇넷에 추가하는 것에 관심이 없다고 가정합니다. 요즘에는 서버에서 대량의 스팸이 발생한다는 사실을 알 수 있습니다. 요즘 대부분의 "해커"는 돈에 의해 동기를 부여받습니다.
Ernie

2
가장 진보 된 공격 도구는 요즘 제로 스킬을 필요로하며 쉽게 구할 수 있으며 일부는 기본적으로 의도적으로 설계되어 있습니다. 봇넷 / 좀비는 피해를 입기 전에 오랫동안 유휴 상태가 될 수 있지만 공격 도구의 버그로 인해 원치 않는 충돌과 이상한 동작이 발생할 수 있습니다.
Oskar Duveborn

11

Tripwire 는 일반적으로 사용되는 도구입니다. 시스템 파일이 변경되면이를 미리 설치해야하지만 시스템 파일이 변경되면이를 알려줍니다. 그렇지 않으면 알지 못하는 새 사용자 계정, 이상한 프로세스 및 알 수없는 파일 또는 명백한 이유없이 대역폭 사용량이 증가하는 등의 항목이 일반적인 징후입니다.

Zabbix 와 같은 다른 모니터링 시스템 은 / etc / passwd와 같은 파일이 변경 될 때 경고하도록 구성 할 수 있습니다.


11

과거에 나를 괴롭힌 것들 :

  • 유휴 상태 여야하는 시스템의 높은 부하
  • 이상한 segfaults, 예. 같은 표준 유틸리티에서 ls(이것은 깨진 루트 키트로 발생할 수 있습니다)
  • /또는에 숨겨진 디렉토리 /var/(대부분의 스크립트 키즈는 트랙을 다루기에는 너무 어리 석거나 게으르다)
  • netstat 존재하지 않아야하는 열린 포트를 표시합니다
  • 프로세스 목록에서 일반적으로 다른 맛을 사용하는 데몬 (예 : bind항상 djbdns)

또한 상자가 손상되었다는 확실한 징후가 있다는 것을 알았습니다. 시스템을 상속받은 관리자의 부지런함 (업데이트 등)에 대해 나쁜 생각이 든다면주의 깊게 관찰하십시오!


10

를 통해 해킹 서버를 확인하는 방법이있다 kill-

기본적으로 "kill -0 $ PID"를 실행하면 식별자 $ PID를 처리하기 위해 nop 신호가 전송됩니다. 프로세스가 실행 중이면 kill 명령이 정상적으로 종료됩니다. (FWIW, nop kill 신호를 전달하기 때문에 프로세스에 아무런 변화가 없습니다). 프로세스가 실행되고 있지 않으면 kill 명령이 실패합니다 (종료 상태가 0보다 작음).

서버가 해킹 / 루트킷이 설치 될 때 가장 먼저하는 일은 커널에게 프로세스 테이블 등에서 영향을받는 프로세스를 숨기도록 지시하는 것입니다. 그러나 커널 공간에서 모든 종류의 멋진 작업을 수행하여 프로세스. 그리고 이것은

a) 잘 코딩 된 / 지능적인 루트킷은 커널이 "프로세스가 존재하지 않습니다"라는 응답으로 커널이 응답하도록하므로이 점검은 광범위하게 수행되지 않습니다. b) 어느 쪽이든 해킹 된 서버에 "불량"프로세스가 실행되면 PID는 일반적으로 / proc에 표시되지 않습니다.

따라서 지금까지 여기에 있다면 방법은 시스템에서 사용 가능한 모든 프로세스 (1-> / proc / sys / kernel / pid_max의 모든 프로세스)에서 -0을 종료하고 실행 중이지만보고되지 않은 프로세스가 있는지 확인하는 것입니다 / proc에

일부 프로세스가 실행중인 것으로 나타나지만 / proc에보고되지 않은 경우 프로세스에 문제가있을 수 있습니다.

https://gist.github.com/1032229의 모든 것을 구현하는 bash 스크립트가 있습니다 . proc에보고되지 않은 프로세스가 발견되면 파고 시작해야합니다.

HTH.


그것은 생산적인 작업 시스템처럼 시스템을 유지할 시간이없는 내 홈 서버에 정말 유용합니다. 어쨌든, 이것을 전문적인 환경에서 사용하고 결과에 대해 "상대적"일 수 있습니까? 답이 3 살이 되려면 : 이것은 여전히 ​​2014 년에 일반적인 감염을 확인하기위한 유효한 방법입니까?
hub

7

나는 여기에 주어진 답변을 두 번째로 내 자신의 하나를 추가합니다.

find /etc /var -mtime -2

지난 2 일 동안 주 서버 파일이 변경된 경우 빠른 표시가됩니다.

이것은 해킹 탐지에 대한 기사입니다 서버가 해킹되었는지 탐지 하는 방법.


1
나는 -mtime 대신 -ctime을 생각합니다. -ctime을 조작 할 수 없음
Tillebeck

5

에서 어떻게 내 서버에서 원치 않는 침입을 감지 할 수 있습니까?

  • IDS 사용

    SNORT®는 규칙 기반 언어를 사용하는 오픈 소스 네트워크 침입 방지 및 탐지 시스템으로 서명, 프로토콜 및 이상 기반 검사 방법의 이점을 결합합니다. Snort는 현재까지 수백만 건의 다운로드를 통해 전 세계에서 가장 널리 보급 된 침입 탐지 및 방지 기술이며 사실상 업계의 표준이되었습니다.

    Snort는 네트워크 트래픽을 읽고 누군가가 서버에 대해 전체 메타 스플 로이트 스캔을 실행하는 "펜 테스트로 구동"과 같은 것을 찾을 수 있습니다. 제 생각에는 이런 종류의 것들을 아는 것이 좋습니다.

  • 로그를 사용하십시오 ...

    사용법에 따라 사용자가 로그인하거나 홀수 IP에서 로그인 할 때, 루트 로그인 또는 누군가 로그인을 시도 할 때마다 알 수 있도록 설정할 수 있습니다. 실제로 서버 는 디버그보다 높은 모든 로그 메시지를 전자 메일로 보냅니다 . 예, 심지어 고시. 물론 그중 일부를 필터링하지만 매일 아침 물건에 대한 10 개의 이메일을 받으면 문제가 해결되도록 수정하고 싶습니다.

  • 구성 모니터링-실제로 전체 / etc를 하위 버전으로 유지하므로 개정을 추적 할 수 있습니다.

  • 스캔을 실행하십시오. LynisRootkit Hunter 와 같은 도구 를 사용하면 응용 프로그램의 보안 허점에 대해 경고 할 수 있습니다. 모든 저장소의 해시 또는 해시 트리를 유지 관리하고 변경 사항을 경고하는 프로그램이 있습니다.

  • 디스크 공간을 언급 한 것처럼 서버를 모니터하십시오. 그래프는 무언가 비정상적인 경우 힌트를 줄 수 있습니다. 내가 사용하는 선인장을 뭔가 경우 등 CPU, 네트워크 트래픽, 디스크 공간, 온도에 눈을 유지하는 모습이 홀수가 있다 홀수가 이상한 이유를 알아해야한다.


2

나는 이것에 추가하고 싶다 :

bash 기록을 확인하십시오. 비었거나 설정을 해제하거나 비우지 않은 경우 누군가가 서버를 손상 시켰을 가능성이 있습니다.

마지막으로 확인하십시오. 알 수없는 IP가 보이거나 매우 비어 있습니다.

그런 다음 수락 된 답변에서 언급 한대로 시스템 파일이 자주 변경되므로 수정 한 날짜를 확인하십시오. 그러나 그들은 종종 수정 된 날짜를 변조합니다.

그들은 종종 임의의 포트에서 실행되는 다른 버전의 ssh를 설치합니다. 이것은 종종 이상한 곳에서 숨겨져 있습니다. 일반적으로 ssh 이외의 다른 이름으로 변경됩니다. 따라서 netstat를 점검하고 (자주 교체 할 때 작동하지 않을 수 있음) iptables를 사용하여 알 수없는 포트를 차단하십시오.

어쨌든 이것은 예방보다 치료보다 낫습니다. 손상된 경우 포맷하고 다시 시작하는 것이 가장 좋습니다. 해킹을 성공적으로 청소했는지 확인하는 것은 거의 불가능합니다.

서버가 손상되지 않도록 다음 사항에 유의하십시오.

  1. SSH 포트 변경
  2. 루트가 로그인 할 수 없도록 방지
  3. 특정 사용자 만 허용
  4. 비밀번호 로그인 방지
  5. ssh 키, 선호하는 암호로 보호 된 키 사용
  6. 가능하면 모든 IP를 차단하고 필요한 IP를 허용하십시오.
  7. fail2ban 설치 및 구성
  8. 트립 와이어를 사용하여 침입 탐지
  9. Nagios 또는 zabbix로 로그인 한 사용자 수를 모니터링하십시오. 로그인 할 때마다 알림을 받더라도 최소한 다른 사람이 언제 게임을하고 있는지 알 수 있습니다.
  10. 가능하면 서버를 VPN에 유지하고 VPN IP를 통해서만 ssh를 허용하십시오. VPN을 확보하십시오.

한 서버에 일단 들어가면 bash 기록을 확인하고 해당 서버에서 ssh를 통해 연결된 다른 서버를 찾습니다. 그런 다음 해당 서버에 연결을 시도합니다. 따라서 암호가 잘못되어 강제 공격을 당하면 다른 서버에 연결하여 해당 서버를 손상시킬 수 있습니다.

그것은 못생긴 세상입니다. 예방은 치료보다 낫습니다.



0

GuardRail을 확인해야합니다. 매일 서버를 스캔하고 멋진 시각적 방식으로 변경된 사항을 알려줍니다. 에이전트가 필요하지 않으며 SSH를 통해 연결할 수 있으므로 에이전트로 시스템과 자원을 정리할 필요가 없습니다.

무엇보다도 최대 5 대의 서버에 무료로 제공됩니다.

여기에서 확인하십시오.

https://www.scriptrock.com/


클라우드 서비스가 루트 권한으로 시스템에 로그인합니까? 서비스가 손상된 경우 어떻게됩니까?
hub

루트를 지정할 필요가 없습니다. 대신 에이전트를 사용하도록 선택할 수도 있습니다. 이는 SSH 호출 대신 시스템이 폴링 함을 의미합니다. DB와 같은 비밀번호는 항상 클라우드가 아닌 시스템에 저장됩니다.
Cheyne
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.