하루에 수백 번의 침입 시도를하는 것이 정상입니까?


196

방금 서버를 확인한 /var/log/auth.log결과 하루에 500 건이 넘는 암호 / 침입 시도 알림이 수신되지 않는 것으로 나타났습니다! 내 사이트가 작고 URL이 모호합니다. 이것이 정상입니까? 조치를 취해야합니까?


2
우리가 불필요한 모든 외부 포트를 잠글 때까지, 우리는 많은 해킹 시도를 받았을뿐만 아니라 언젠가는 두 나라에서 해킹 당했을 때 너무 나빴다는 것을 기억합니다! 그렇습니다. 100 번의 침입 시도가 완벽하게 정상입니다.
Django Reinhardt

91
16 초마다 한 번씩 새로운 "시퀀스"공격이 발생하는 서버가 있습니다. 단일 시퀀스는 일반적으로 다양한 포트에서 약 100 회 시도합니다. 언젠가 차기 위해 방화벽 밖에서 패치되지 않은 서버를 켰습니다. 전원이 켜진 후 10 분이 채 걸리지 않았습니다. 인터넷은 진정한 정글입니다. 먹지 않도록 노력하십시오.
NotMe

2
내 질문이 잘못된 사이트에 게시 된 것을 볼 수 있습니다 : superuser.com/questions/200896/…
Justin C

6
나는 다른 사람들에게 동의하지만 필요한 공통 포트 (80, 443)에서 일반적입니다. 기본 포트를 22에서 6022와 같이 모호한 것으로 변경하여 SSH 포트에 대한 이러한 시도를 실제로 제거했습니다. 이것만으로도 해당 유형의 공격 중 99 %가 거의 제거되었습니다.
킬로

2
SSH 포트를 변경하려는 경우 포트를 1024 아래로 유지해야하는 보안상의 이유가 있습니다 (루트 만 포트 <1024를 열 수 있으므로 SSH를 하이재킹하는 다른 사용자로부터 보호).
Brendan Long

답변:


207

오늘날의 인터넷에서 이것은 슬프게도 정상입니다. 전체 IP 네트워크에서 찾은 각 서버에 로그인하려고하는 많은 봇넷이 있습니다. 일반적으로 루트 또는 특정 응용 프로그램 계정과 같은 잘 알려진 계정에는 간단한 사전 공격을 사용합니다.

공격 대상은 Google 또는 DNS 항목을 통해 찾을 수 없지만 공격자는 특정 서브넷 (예 : 알려진 루트 서버 호스팅 회사)의 모든 IP 주소를 시도합니다. 따라서 URL (따라서 DNS 항목)이 모호하지는 않습니다.

그래서 다음과 같은 것이 중요합니다.

  • SSH에서 루트 로그인 허용 안 함 ( howto )
  • 웹 응용 프로그램에서도 모든 곳에서 강력한 암호를 사용하십시오.
  • SSH의 경우 가능하면 공개 키 인증을 사용하고 비밀번호 인증을 완전히 비활성화하십시오 ( howto )

또한 authlog를 스캔하는 fail2ban 을 설치할 수 있으며 IP에서 일정량의 로그인 시도가 실패 /etc/hosts.deny하면 공격자를 몇 분 동안 잠그기 위해 해당 IP를 추가 하거나 iptables / netfilter에 추가합니다 .

SSH 공격 외에도 취약한 웹 응용 프로그램 (일부 블로그 앱, CMS, phpmyadmin 등)이 있는지 웹 서버를 검색하는 것이 일반적이되었습니다. 따라서 최신 정보를 안전하게 유지하십시오!


21
fail2ban과 같은 응용 프로그램은 아침에 바보 같은 시간에 봇이 서버에 충돌하는 것을 '일시적으로'중지하는 데 도움이 될 수 있습니다. :-) 24 시간 동안 3 번의 잘못된 시도를 금지하도록 설정했습니다.
emtunc

46
그리고 ssh의 포트를 22에서 222로 옮기십시오. 그것은 아주 잘 작동합니다.
Tom O'Connor

40
+1, 공개 키 인증 만 해당 :)
0xC0000022L

3
@STATUS_ACCESS_DENIED : fail2ban이 수행하는 작업은 실행할 쉘 명령의 목록입니다. 따라서 모든 사용자 정의 구성에서 실제로 유연하고 쉽게 작업 할 수 있습니다. 가장 좋은 참조는 다운로드하여을 보는 것 action.d/iptables.conf입니다.
mattdm

4
이와 같은 공격자를 차단하는 것은 시간 낭비입니다. 루트 로그인을 비활성화하면 아무도 비밀번호를 제외하고 올바른 로그인 이름을 추측하지 못할 가능성이 높습니다. SSH 자체는 이미 비밀번호 요청 속도를 제한하고 있으므로 사용자 이름을 알더라도 (임의의 봇은 그렇지 않음) 괜찮은 비밀번호를 사용하더라도 추측 할 수 없습니다.
Brendan Long

58

몇 100은 괜찮습니다 ... 지난 달에 내 서버 중 하나가 40k 번의 시도 실패를 발견했습니다. 나는 그들을 플롯의 문제 물마루했다 : 지도

ssh 포트를 변경하고 Port Knocking을 구현하면 숫자가 0으로 떨어졌습니다 :-)


2
좋은지도. 이 작업을 수행하는 방법을 알고 싶습니다!
jftuga

9
@ jftuga 먼저 모든 IP를 로그에서 얻었습니다. grep 'Failed password' /var/log/secure* | grep sshd | grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' | sort | uniq(중복을 허용하려면 끝에있는 | uniq를 제거하십시오). 그런 다음 CSV로 넣어 zeemaps.com에 업로드 할 수 있습니다. 그들은 (군 당 시도 횟수에 대한 적색, 녹색)지도 색상을 카운트를 사용하는 것이 어디 다음 내 더 나은지도를 본 적이 있지만 제트는 생각하지 않은 한 밖으로
바트 드 보스

3
'구현 된 포트 노킹'이란 무엇입니까? apt-get을 통해 설치할 수있는 앱이 있습니까? 숫자가 0으로

18
모호함을 통한 보안은 나쁜 포장을합니다. 전체 전략이 아닌 전체 전략 의 일부 라면 완벽하게 괜찮습니다 . 결국, 모호한 문자열 이외의 다른 암호는 무엇입니까?
Joel Coel

5
@Joel Coel, 모호한 문제를 통한 대부분의 보안과 달리 비밀 문자열입니다. 모호하지만 반드시 비밀 프로세스는 아닙니다.
tobyodavies

29

공개 키 인증 만 허용하고 루트 로그인을 허용하지 않는 것 외에도 "tarpit"을 사용합니다.

에서 netfilterrecent당신이 (함께 사용할 수있는 모듈 INPUT체인) :

iptables -A INPUT -i if0 -p tcp --dport 22 -m state --state NEW -m recent --set --name tarpit --rsource
iptables -A INPUT -i if0 -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 180 --hitcount 6 --name tarpit --rsource -j DROP
iptables -A INPUT -i if0 -p tcp --dport 22 -j ACCEPT

포트 22에 연결하려는 모든 시도는 recentIP와 모듈로 "타르 핏 (tarpit)"이라는 이름 으로 나열됩니다 (호기심이 많으면 살펴보십시오 /proc/net/xt_recent/tarpit). 분명히 다른 이름을 사용할 수 있습니다.

IP를 나열하거나 등록 해제하려면 다음을 사용하십시오.

echo "+123.123.123.123" > /proc/net/xt_recent/tarpit
echo "-123.123.123.123" > /proc/net/xt_recent/tarpit

이 시도는 300 초 안에 5 회 시도를 제한합니다. 기존 연결이있는 사용자는 이미 연결이 설정되어 있고 더 많은 비율을 만들 수 있으므로이 제한에 의해 방해받지 않습니다.

원하는대로 규칙을 조정하되 규칙 순서대로 추가해야합니다 (즉, 순서를 추가 한 다음 순서대로 삽입 할 때 순서대로 사용하십시오).

이것은 소음을 엄청나게 줄입니다. 또한 포트 변경에 대한 인식 된 보안과 달리 실제 보안 (무차별 강제 실행)을 제공합니다. 그러나 귀하의 환경에서 가능한 경우 포트를 변경하는 것이 좋습니다. 소음 수준도 많이 줄입니다 ...

나는이 규칙과 위의 규칙없이 잘 실행되었지만 여전히 이것을 fail2ban과 결합 할 수 있습니다.

편집하다:

이 작업을 수행하여 자신을 잠글 수 있으므로 다음과 같은 것을 추가하면 특정 포트를 두드려 차단을 해제 할 수 있습니다.

iptables -A INPUT -i if0 -p tcp --dport <knockport> -m state --state NEW -m recent --name tarpit --remove

2
나는 이것을 사용하고 때때로 나 자신을 차단하기 위해, 당신은 당신의 금지를 해제하기 위해 "노크"할 수있는 다른 포트를 설정하는 것과 같습니다.
benlumley

@benlumley : 좋은 지적입니다. 포트 노킹은 기본 포트를 변경하는 데 유용 할 수 있습니다. – 또는 둘 다 조합하여도 가능합니다.
0xC0000022L

@ benlumley : 귀하의 의견을 보았습니다 (현재 Sam이 제거했습니다). 답이 편집 / 향상 되더라도 절대 신경 쓰지 않습니다.;)
0xC0000022L

15

fail2ban 또는 SSH를 IP에 잠그는 것과 같은 유사한 방법을 구현할 수 있습니다. 안타깝게도 봇은 액세스를 항상 무차별 적으로 시도하기 때문에 정상적인 상태이므로 올바른 비밀번호를 확인해야합니다.


3
SSH를 사용하는 경우 공개 키 인증을 고려하십시오. 이것은 비밀번호 인증보다 조금 더 안전합니다.
Piskvor

12

. 요즘 꽤 정상입니다.

가능한 경우 관리 목적으로 공개 키 인증 만 사용하십시오. 워크 스테이션에서 개인 키를 생성하십시오.

$ ssh-keygen -t dsa

~ / .ssh / id_dsa.pub 의 내용을 서버 ~ / .ssh / authorized_keys (및 직접 루트 로그인이 필요한 경우 /root/.ssh/authorized_keys)에 복사하십시오 .

공개 키 인증 만 수락하도록 서버 / etc / ssh / sshd_config 를 구성하십시오 .

PubkeyAuthentication yes
PasswordAuthentication no
PermitRootLogin without-password

서버가 너무 많은 경우 Puppet 을 사용 하여 공개 키와 구성을 실행할 수 있습니다.

로 봐 Denyhostsfail2ban 반복되는 SSH 로그인 시도를 차단하고 볼 스 노트를 당신이 / IPS를 전체 IDS를 필요로합니다.


2
서버에 대한 쉘 액세스를 위해 SSH에서 공개 키 인증을 사용하지 않는 것이 좋습니다. 워크 스테이션이 손상되거나 도난 당하면 암호 없이도 누군가 서버에 공개적으로 액세스 할 수 있습니다. 공개 키 인증은 암호 없이도 다른 시스템에 SSH로 액세스 할 수 있도록 스크립트 나 프로그램과 같은 것이 필요할 때 더 많은 스크립트를 사용하므로 스크립트 / 프로그램에 일반 텍스트 암호를 포함시킬 필요가 없습니다.
등록 된 사용자

5
@ 삭제 된 계정 : SSH 개인 키의 암호를 설정할 수 있습니다.
Phil Cohen

2
"등록 된 사용자"설명이 잘못 안내되어 있습니다. 명확히하기 위해 : 항상 개인 키에 올바른 암호를 설정하고 서버에 개인 키를 저장하지 마십시오. 개인 키를 자신의 워크 스테이션에 보관하십시오. ssh-agent 프로그램에 키를 추가하고 암호를 입력하면 암호를 다시 입력하지 않고도 공개 키가 설치된 모든 시스템에 로그인 할 수 있습니다. 서버에서 서버로 로그인 할 수 있도록 ssh 클라이언트에서 에이전트 전달을 사용하십시오. 개인 키를 도난당하는 것은 좋지 않지만 적절한 암호를 사용하면 도난당한 암호만큼 나쁘지 않습니다.
Martijn Heemels

관리자의 개인 키를 암호화되지 않은 상태로 저장하지 않아도됩니다.
yrk



6

나는 단지 500을 얻는 것이 약간 낮다고 말하고 싶습니다.

이전 고용주에서 컴퓨터 보안 연구원 중 한 사람은 끊임없는 침입 스트림을 "인터넷 노이즈에 상응하는 인터넷 "이라고했습니다. 그는 인터넷에서 시스템을 검색하고 자동으로 스크립트를 악용하여 시스템을 가로 채려는 악의적 인 트래픽의 정상적인 흐름으로 설명했습니다. 봇넷 및 기타 악성 시스템은 SETI와 같은 취약한 시스템에 대해 인터넷을 영구적으로 검색하고 다시 검색합니다.


6

예,

이것은 일반적이지만 좋은 싸움과 싸워서는 안된다는 의미는 아닙니다. 다음은 서버 보안을 강화하는 방법에 대한 몇 가지 단계입니다.

DNS 관련 IP 주소를 피하십시오

도메인 이름과 관련된 IP 주소에서 SSH 액세스를 비활성화하여 공유 또는 코 로케이션 환경에서이 수를 크게 줄일 수 있습니다. 목록에없는 비 도메인 IP 주소는 이러한 유형의 트래픽을 덜 수신하므로 목록에없는 IP를 구입하고이 IP 만 SSH 액세스에 사용하십시오.

모든 SSH 액세스에 VPN 사용

서버 환경 내 개인 네트워크에 IPsec / VPN을 구현할 수있는 환경에있는 경우이 방법이 이상적입니다. 모든 SSH 인터넷 액세스를 비활성화하고 통합 된 소등 솔루션이 있는지 확인하십시오. VPN을 설정하고 VPN에서 SSH 액세스 만 허용하십시오.

SSH 액세스를위한 IP 주소 규칙 구현

VLAN이 옵션이 아닌 경우 알려진 IP 주소 범위의 SSH 연결 만 허용하도록 라우터 또는 방화벽 규칙을 구성하십시오.

이 단계를 수행하면 밤에 누군가가 SSH를 통해 서버에 액세스하기 위해 호스팅 회사 네트워크를 손상시켜야한다는 것을 알기 때문에 훨씬 더 쉽게 잠을 자게됩니다.


5

수백 개의 실패한 SSH 연결을 보는 것은 매우 정상입니다.

옵션이 있다면 SSH 포트를 비표준으로 변경하면됩니다. 반드시 서버를 더 안전하게 만들 필요는 없지만 로그를 정리합니다 (의도적으로 침입하려는 사람을 볼 수 있습니다).


5

fail2ban과 같은 자동 잠금 메커니즘을 사용하는 것 외에도 실제로 공격자의 남용 주소 ISP에 문의하는 옵션이 하나 더 있습니다. 완전히 쓸데없는 것처럼 보일지 모르지만 script-kiddie의 경우 ISP가 조치를 취하려는 것 이상입니다.

남용 주소를 찾으려면 arin.net으로 시작한 후 whois를 사용하여 IP 주소 를 찾으십시오 . 다른 지역 레지스트리로 리디렉션 될 수 있지만 결국에는 주소가 포함 된 IP 블록의 담당 ISP를 찾을 수 있습니다. abuse @ 주소를 찾거나 기술 담당자에게 메일을 보내십시오.

관련 로그 파일 항목과 함께 정중 한 메시지를 보내고 (개인 정보를 제거해야 함) 문제가있는 호스트에 대해 조치를 취하도록 요청하십시오.


4
우리는 이것을했다. 그러나 소요 된 시간 대 수령 된 혜택의 양은 매우 적기 때문에 중요하지 않습니다.
NotMe

1
보다 효과적이지만 훨씬 위험한이 전술의 변형은 ISP를 중간 노드에보고하는 것입니다. 그러나 당신 은 반드시 당신의 보고서 증거를 확실하게 해야 합니다. 나는 그들이 학대 보고서를 무시하고 있었기 때문에 이것을 한 번 한 번에 전체 ISP에 심각한 어려움을 겪었습니다.
staticsan

1
한 번 이렇게하면 악용 메시지가 서버 담당자 대신 해커에게 전달되었습니다. 그 이후로 나는 더 이상 귀찮게하지 않고 너무 많은 문제를 일으킨다.
wump

이것은 실제로 대부분의 경우 도움이되지 않으며 시간이 많이 걸릴 수 있습니다.
RichVel

4

fail2ban을 사용하지 않고 비표준 포트에서 SSH 및 기타를 실행하는 것이 좋습니다. 나는 모호함에 의한 보안을 믿지 않지만 이것이 로그의 소음을 줄이는 훌륭한 방법이라고 생각합니다.

비표준 포트에서 로그인에 실패하면 그 사이가 거의 없으며 더 많은 표적 공격을 나타낼 수도 있습니다.

한 걸음 더 나아가서 Kippo 와 같은 SSH 허니팟을 설치하여 무차별 대항 자 들을 ' 들어가서 '기회를 주 었는지 확인할 수도 있습니다.


하하, 키포는 아주 좋아 보인다. 나는 그들이 무엇을하려고하는지보기 위해 서버에 설치하려고합니다.
wump

4

예, 정상입니다. 소규모 웹 사이트로 고객의 상황을 설명합니다.

항상 해킹 당할 준비를하십시오.

개발자 서버에 웹 사이트 사본을 준비하십시오. XAMPP를 사용하는 Windows 바탕 화면이 무료로 제공됩니다.

항상 개발자 서버를 변경 한 다음 라이브 웹 사이트에 업로드하십시오. Wordpress와 같은 CMS 인 경우 개발자 서버에 게시물을 작성한 후 복사하여 라이브 서버에 붙여 넣습니다.

라이브 웹 사이트에서 개발자 서버로 아무것도 다운로드하지 마십시오.

변경 사항이 없는지 정기적으로 웹 페이지를 모니터링하십시오. 특히, 약물 또는 '향상된'제품에 대한 숨겨진 링크. 이를 위해 많은 브라우저 추가 기능과 프로그램을 찾을 수 있습니다.

당신이 타협 한 경우. 호스트에게 알리고 모든 것을 삭제하고 모든 비밀번호를 변경하고 깨끗한 dev 서버를 빈 웹 서버에 업로드하십시오. 재발을 방지하기 위해 호스트와 협력하십시오.

소규모 사이트에는 보안 팀이 필요하지 않습니다. 그것이 당신의 호스트가 제공하는 것입니다. 그렇지 않은 경우 라이브 서버를 이동하는 대신 dev 서버가있을 때 수행하기가 훨씬 쉬운 다른 호스트를 얻습니다.

도움이 되었기를 바랍니다.


2
"항상 해킹 당할 준비를하세요"+1
user78940

3

개인적으로 SSH 포트를 옮기고 싶지 않기 때문에 다른 방법으로 중지 할 수 있습니다.

로컬 ISP의 WHOIS 항목을 통해 공격을 한 달에 1-2 회 로그인 시도로 줄일 수있었습니다 (당시 약 1k / 일). 나는 아직도 denyhosts를 사용하여 그것들을 발견했다 .


3

이미받은 다른 훌륭한 제안 외에도 주어진 서버에 적절한 경우 AllowUsers 지시문 을 사용하고 싶습니다 . 이렇게하면 지정된 사용자 만 SSH를 통해 로그인 할 수 있으므로 안전하지 않게 구성된 게스트 / 서비스 / 시스템 계정을 통해 액세스 할 가능성이 크게 줄어 듭니다.

예:

AllowUsers admin jsmith jdoe

AllowUsers 옵션은 ssh 서비스에 액세스 할 수있는 사용자를 지정하고 제어합니다. 공백으로 구분하여 여러 사용자를 지정할 수 있습니다.


3

예, 정상입니다. 당신은 할 수 있습니다 :

  • fwknop 을 사용하여 공격 기회를 줄입니다

Fwknop은 스푸핑이 불가능하고 실제로 연결 권한 부여와 달리 인증되기 때문에 더 나은 포트 노크 구현 중 하나입니다.

  • Openssh가 사용하는 포트를 변경할 수 있지만 실제로 보안을 개선하지는 않습니다.

  • Google 인증 자 또는 Wikid를 사용하여 SSH 인증 강화

이렇게하면 암호 기반 공격과 관리자 컴퓨터를 손상시키고 ssh-key & password 콤보를 훔치는 결정된 공격자 / 대상 공격의 가능성을 보호 할 수 있습니다.

숙련 된 공격자가 완전히 패치 된 관리자 상자를 얼마나 쉽게 손상시킬 수 있는지 확인 하려면 최신 pwn2own comp를 확인하십시오.


1

슬프게도 이것은 정상적인 현상입니다. 공격자를 자동으로 감지하고 차단 하려면 fail2ban 과 같은 것을 시스템에 추가하는 것을 고려해야 합니다. 아직 그렇게하지 않았다면 공개 키와 함께 ssh 만 사용하는 것을 고려해야하며 ssh를 통한 루트 로그인을 허용하지 않아야합니다. ftp를 사용하여 파일을 시스템으로 전송하는 경우 대신 scp / sftp를 사용하십시오.


1

포트 노킹을 구현했으며 하루에 몇 개의 프로브가 있습니다. 그들은 연결이되지 않아서 떠나갑니다. 관련된 포트에 대한 모든 액세스를 기록하고보고합니다.

또한 영구 공격자를 일시적으로 차단하는 방화벽으로 Shorewall과 함께 fail2ban을 방화벽으로 실행했습니다.

SSH에 대한 인터넷 액세스가 필요하지 않으면 SSH를 비활성화하십시오. 원격 액세스가 필요한 알려진 주소가 몇 개있는 경우 해당 주소에 대한 액세스를 제한하십시오.

인증 된 키에 대한 액세스를 제한하는 것도 도움이 될 수 있습니다.


0

나는 pam_abl무차별 강제력을 일시적으로 블랙리스트에 올리는데 효과적입니다. hosts.deny또는에 의존하기보다는 자체 데이터베이스를 사용하여 PAM에서 인증을받는 것이 더 좋다고 생각합니다 iptables.

또 다른 장점은 pam_abl스캔 로그 파일에 의존하지 않는 것입니다.


0

요즘 완전히 정상입니다.
SSH 포트에서 들어오는 새 연결에 대해 방화벽에서 "버스트"제한을 설정
하거나 여러 로그 파서 중 하나 인 fail2ban을 설치하거나 SSH 포트를 변경할 수 있습니다.

마지막 것이 가장 쉬운 것입니다. 로드가 많은 시스템에서 이러한 침입 시도는 전체 시스템에 심각한 영향을 줄 수 있습니다.

-
감사합니다,
로버트


0

예, 정상입니다.

방금 표준 22에서 ssh 포트를 변경했습니다. 내 서버, 내 규칙 :) 그냥 / etc / ssh / sshd_config를 편집하고 포트를 변경하고 서비스를 다시 시작하십시오. 유일한 단점은 사용하는 모든 ssh 클라이언트에 구성에 해당 포트를 추가해야한다는 것입니다.


0
  • 루트 로그인 비활성화 (모든 리눅스 시스템에서 루트 사용자가 존재하므로 봇은 사용자 이름을 쉽게 추측 할 수 있습니다.) 일반 사용자로 로그인 한 후 su 또는 sudo로 루트로 전환 할 수 있습니다.

  • 기본 포트를 22에서 변경

  • 알려진 IP에서만 SSH 액세스 허용

  • ssh 액세스 권한이있는 사용자에게 강력한 영숫자 암호를 사용하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.