SSH를 통한 루트 로그인이 왜 그렇게 나쁘지 않은가?


83

인터넷상의 모든 사람은 SSH 를 통한 루트 로그인을 사용하지 않는 것이 좋습니다. 시스템에 나쁜 습관이자 보안상의 허점이기 때문에 아무도 그 이유를 설명하지 않습니다.

루트 로그인을 활성화 할 때 (특히 비밀번호 로그인을 비활성화 할 때) 그렇게 위험한 것은 무엇입니까?

암호 인증이 허용되는 경우 보안 관점에서 X 기호 사용자 이름과 Y 기호 암호 또는 루트 사용자 이름과 X + Y 기호 암호의 차이점은 무엇입니까?


2
대부분의 시스템에서 루트 사용자를 갖는 것은 그 자체로 나쁘므로, 해당 사용자에 대해 SSH 로그인을 사용하는 것만 남겨 두십시오!
Suman

1
ehealth-aussie.blogspot.com/2012/01/…에는 ssh를 통한 루트 로그인이 필요합니다 . 모든 것이 타협입니다.
emory

2
음 ...이 질문을 보안으로 옮겨야합니까? 이 주제는 보안에 더 의존하기 때문에 * nix 시스템입니다.
Braiam

루트를 비활성화하는 관리상의 이유가 있습니다. 상용 서버에서는 항상 개인별 액세스를 제어하려고합니다. 뿌리는 결코 사람이 아닙니다. 일부 사용자가 루트 액세스 할 수 있도록 경우에도 다음 자신의 사용자로 로그인하도록 강제해야 su -하거나 sudo -i그래서 실제 로그인이 기록 될 수있다. 이렇게하면 개인에 대한 모든 액세스 권한을 취소하는 것이 훨씬 간단 해져서 루트 암호가 있어도 아무 것도 할 수 없습니다.
Philip Couling

답변:


62

SSH를 통한 루트가 나쁜 이유

SSH를 통해 컴퓨터에 로그인을 시도하는 많은 봇이 있습니다. 이 봇은 다음과 같은 방식으로 작동합니다.

그들은 비슷한 것을 실행 ssh root@$IP한 다음 "root"또는 "password123"과 같은 표준 암호를 시도합니다. 올바른 비밀번호를 찾을 때까지 가능한 한 오랫동안이 작업을 수행합니다. 전 세계에서 액세스 가능한 서버에서는 로그 파일에 많은 로그 항목이 표시됩니다. 분당 최대 20 명까지 갈 수 있습니다.

공격자가 운이 좋거나 시간이 충분하고 암호를 찾으면 루트 액세스 권한이 있으며 문제가 발생할 수 있습니다.

그러나 SSH를 통해 root가 로그인하는 것을 허용하지 않으면 봇은 먼저 사용자 이름을 추측 한 다음 일치하는 비밀번호를 추측해야합니다. 따라서 그럴듯한 암호 목록에 N항목이 있고 그럴듯한 사용자 목록이 M큰 항목 이라고 가정하겠습니다 . 봇에는 N*M테스트 할 항목 세트가 있으므로 봇이 크기 세트 인 루트 케이스와 비교할 때 봇이 조금 더 어려워집니다 N.

어떤 사람들은이 추가 기능 M이 보안의 실질적인 이점이 아니라고 말하며 보안 향상이 조금만 강화 된 것에 동의합니다. 그러나 나는 이것 자체가 안전하지 않은 작은 자물쇠로 더 많이 생각하지만 많은 사람들이 쉽게 접근 할 수 없도록 방해합니다. 이것은 물론 컴퓨터에 tor 또는 apache와 같은 다른 표준 사용자 이름이없는 경우에만 유효합니다.

루트를 허용하지 않는 더 좋은 이유는 루트가 표준 사용자보다 시스템에 더 많은 손상을 줄 수 있기 때문입니다. 따라서 멍청한 행운으로 비밀번호를 찾으면 전체 시스템이 손실되는 반면 표준 사용자 계정을 사용하면 해당 사용자의 파일 만 조작 할 수 있습니다 (아직 매우 나쁩니다).

의견에서 일반 사용자는 사용할 권리 sudo가 있으며이 사용자의 암호를 추측하면 시스템도 완전히 손실 된다고 언급했습니다 .

요약하면 공격자가 얻는 사용자 암호는 중요하지 않습니다. 그들이 하나의 암호를 추측하면 더 이상 시스템을 신뢰할 수 없습니다. 공격자는 해당 사용자의 권한을 사용하여로 명령을 실행할 sudo수 있으며 시스템의 취약점을 악용하여 루트 권한을 얻을 수도 있습니다. 공격자가 시스템에 액세스 할 수 있으면 더 이상 신뢰할 수 없습니다.

여기서 기억해야 할 것은 SSH를 통해 로그인 할 수있는 시스템의 모든 사용자가 추가적인 약점이라는 것입니다. 루트를 비활성화하면 명백한 약점 하나가 제거됩니다.

SSH를 통한 비밀번호가 나쁜 이유

암호를 비활성화하는 이유는 정말 간단합니다.

  • 사용자는 잘못된 비밀번호를 선택합니다!

비밀번호 사용에 대한 전체 아이디어는 비밀번호를 추측 할 수있는 경우에만 작동합니다. 따라서 사용자가 "pw123"암호를 사용하면 시스템이 안전하지 않게됩니다. 사람들이 선택한 암호의 또 다른 문제는 암호가 기억하기 어렵 기 때문에 암호가 절대로 임의로 생성되지 않는다는 것입니다.

또한 사용자가 비밀번호를 사용하여 Facebook 또는 Gmail 계정과 서버에 비밀번호를 재사용하는 경향이 있습니다. 따라서 해커가이 사용자의 Facebook 계정 암호를 받으면 서버에 침입 할 수 있습니다. 피싱을 통해 사용자가 쉽게 분실하거나 Facebook 서버가 해킹 당할 수 있습니다.

그러나 인증서를 사용하여 로그인하면 사용자는 자신의 비밀번호를 선택하지 않습니다. 이 인증서는 1024 비트에서 최대 4096 비트 (~ 128-512 자 암호)까지 매우 긴 임의의 문자열을 기반으로합니다. 또한이 인증서는 서버에 로그인하기위한 것이며 외부 서비스와 함께 사용되지 않습니다.

연결

http://bsdly.blogspot.de/2013/10/the-hail-mary-cloud-and-lessons-learned.html

이 기사는 주석에서 비롯되었으며 SSH를 통해 로그인을 시도하는 봇넷 문제, 로그인 방법, 로그 파일의 모양 및 그들을 막기 위해 할 수있는 일 Peter Hansteen이 작성했습니다.


10
좋은 요약입니다. 그러나 ssh 개인 키도 도난 당할 수 있습니다.
Faheem Mitha

16
@Faheem Mitha 그래도 훔친 사람은 추측 한 것과 다릅니다. 또한 개인 키는 귀하의 손 (또는 하드 드라이브)에만 있으며 Stack Exchange 또는 Google과 같은 타사의 손에는 없습니다.
Raphael Ahrens

2
+1. 이 대답은 실제로 간단히 요약 할 수 N*M > N있습니다. 대부분의 * nix 호스트에는 root사용자가 있으므로 root가 원격 호스트에서 직접 로그인하도록 허용하는 경우 테스트 매트릭스의 크기는 시도 할 암호의 수입니다. 직접 루트 로그인을 허용하지 않으면 가능한 조합 수에 테스트하려는 사용자 이름 수가 곱해집니다 (그리고 여전히 유효한 사용자 이름을 테스트한다고 보장 할 수는 없습니다!).
CVn

3
@ MichaelKjörling 나는 일반적으로 사용자 이름이 비밀이 아니며 누군가에게 거기에 도착하도록 요청할 수 있기 때문에 사용자 이름을 얻는 것이 어렵지 않다고 덧붙입니다. 그러나 그것은 봇과 간단한 시도에 반대합니다.
Raphael Ahrens

2
@ 모두 사용자 이름에 X 기호와 암호 Y가 있으면 시도 할 수있는 조합 이 # of X length words* # of Y length words있습니다. 사용자 이름이 고정되어 있지만 (예 : 루트) 암호가 X + Y 기호 인 경우 # of X+Y length words가능한 암호 가 있습니다. 그리고 # of X+Y length words=# of X length words * # of Y length words
skarap

10

이는 직접 루트 로그인이 허용되지 않는 이유 중 일부일 수 있습니다.

  • 무차별 시도. 직접적인 루트 로그인은 성공적인 무차별 대입 공격에 더 많은 피해를 줄 수 있습니다.
  • "암호가없는"SSH 키를 잘못 구성하면 (인간 오류 발생) 컴퓨터가 인터넷에 노출 될 수 있습니다

그러나 이것은 빙산의 팁일뿐입니다. 다음과 같은 다른 제한 및 구성을 구성해야합니다.

  • 기본 포트 변경 (22)
  • 강력한 암호 및 암호
  • 호스트 기반 인증 비활성화
  • 허용 된 사용자 목록 만들기
  • 유휴 시간 초과 구성
  • SSHv2 프로토콜 강제
  • 빈 비밀번호 비활성화
  • fail2ban을 다시 측정하는 무차별 대입
  • 모든 것을 기록하십시오
  • SSH 키를 구성하고 .ssh / authorized_keys의 공개 키에서만 신뢰

5
"직접 루트 로그인은 성공적인 무차별 대입 공격에 더 많은 피해를 줄 수 있습니다." 기본 sudo설정 과 비교하면 실제로는 아닙니다 . 실제 킬러는 주어진 호스트에서 유효하다고 믿을 수있는 사용자 이름이 하나도 없을 때의 곱셈 효과입니다.
CVn

@ MichaelKjörling-그래, 엉망인 sudo가 PermitRoot만큼 유해 할 수 있음을 확실히해라.)


1
많은 시나리오에서 포트 변경은 실제로 해 롭습니다. 그리고 그것은 모호함에 의한 보안에 지나지 않습니다.
0xC0000022L

무차별 대입 공격은 SSH의 문제 일뿐만 아니라 시스템의 다른 모든 요소에 대한 것이므로 fail2ban을 언급하면 ​​+1입니다. 실제 목적 (개인 데이터에 액세스, 파일 덤프로 사용, 피싱 사용 등)을 위해 시스템을 "인계"하기 위해 루트 또는 시스템 권한을 얻을 필요가 없습니다.
Eric Grange

8

루트 사용자 이름과 X + Y 기호 암호는 최소한 X 기호 사용자 이름 + Y 기호 암호만큼 안전합니다. 사실 그것은 더 안전하고 사람들의 이름을 추측하기 쉽게 만듭니다 (봇은 john, mike, bill 등을 시도 할 수 있습니다 ... 그리고 btw : 그것은 루트를 시도하는 대신 많은 사람들이하는 일입니다). 표적 공격 인 경우 특히 운이 나쁘다. 누군가 회사의 서버를 침입하려는 경우에는 sysadmin의 이름 (닉)을 찾는 데 문제가되지 않습니다.

그리고 공격자가 sysadmin이 ssh 로그인에 사용한 계정에 액세스 한 다음 ( su또는 sudo자신의 작업을 수행하는) 시스템 관리자가 다음에 입력 할 때 공격자 루트 암호를 보내는 프로그램으로 해당 사용자의 세션을 감염시킬 수 있습니다. 시각.

그건 어떤 있습니다 (또는해야한다)보기의 보안 관점에서 나쁜 관행을 고려 루트 로그인의 유형입니다. "일반적인"사용자 로그인-> su / sudo chain은 감사 추적을 추가합니다. 일반 영어로 : 누가 무엇을했는지 알아낼 수 있습니다.

특별한 경우는 한 사람 만 루트 액세스 권한을 가진 경우 일 수 있습니다. 이 경우 추가 "일반"사용자를 사용하면 많은 가치가 추가되지 않습니다 (적어도 나는 그 가치를 볼 수 없었습니다). 그러나 어쨌든-어쨌든 시스템에 간단한 사용자가 있어야합니다 (비 관리 작업, wget 실행 등의 경우 ;-)).


4

루트 로그인을 활성화 할 때 (특히 비밀번호 로그인을 비활성화 할 때) 그렇게 위험한 것은 무엇입니까?

인터넷에 연결되어있는 경우 공격자 (봇 / 봇넷 / 해커)는 암호 만 추측하면 시스템을 완전히 제어 할 수 있습니다. 또한 같은 이유로 시스템 계정 (www-data, proxy 등)은 SSH를 통해 로그인 할 수 없습니다.

암호 로그인을 비활성화 한 경우 (예 : 공개 키 사용) 개인 키를 보유한 사람이 시스템을 완전히 제어 할 수 있다는 점을 고려하십시오. 아래에서 사용자와 공개 키를 사용하는 것이 더 나은 이유를 확인하십시오.

암호 인증이 허용되는 경우 보안 관점에서 X 기호 사용자 이름과 Y 기호 암호 또는 루트 사용자 이름과 X + Y 기호 암호의 차이점은 무엇입니까?

a) 공격자는 사용자 이름과 비밀번호를 모두 알고 있어야합니다. b) 공격자가 시스템을 위반하는 경우 공격자에게 약간의 뉘앙스를 추가하여 권한있는 계정에 즉시 액세스 할 수 없습니다.

이 경우 공개 키는 다음과 같은 장점이 있습니다.

  1. 공격자는 공개 키가 필요합니다
  2. 공격자는 상승 된 권한을 얻기 위해 암호 (또는 인증 방법)가 필요합니다

1
내가 사용하는 암호 중 거의 20 개 미만의 임의의 영숫자 문자 ([A-Za-z0-9]와 특수 문자 몇 개 설정) 미만입니다. 20 개의 문자 (40 자 길이 중 20 자 길이)는 10 ^ 32 조합 순서로 제공됩니다. 128 비트의 엔트로피는 10 ^ 38 정도입니다. 큰 차이는 아니지만 모든 사항을 고려하고 SSH 서버는 원하는 속도 제한을 자유롭게 구현할 수 있으므로 이러한 경우 오프라인 무차별 대입 공격을하는 것과는 다릅니다. 128 비트 키만큼 기억하기 어려운 암호로 살 수 있다면 암호에는 아무런 문제가 없습니다.
CVn

@michael shh ... 범위를 지정하지 마십시오. 이제 해커는 20 자 길이의 레인보우 테이블을 사용해야한다는 것을 알고 있습니다.
Braiam

6
@Braiam Rainbow 테이블은 공격자가 오프라인 검색을 위해 해시에 액세스 할 수있는 경우에만 유용합니다. 이 경우 공격자는 서버 응답 만 확인할 수 있으며, 시도 횟수가 많고 속도가 느릴 수 있습니다.
Peter

@Peter ups, 나는 사전과 해시를 엉망으로 만들었지 만 어쨌든 OP는 약하거나 빈 암호를 사용해서는 안되는 이유에 대해 물었다. 내가 그런 식으로 해석되지 않아서 FUD로 받아 들여서 죄송합니다.
Braiam

2
1.8 * 10 ^ 35 개의 비밀번호를 사용하고 싶을 경우 (40 개 중 18-22 개의 임의의 문자 범위에 해당하며, 해당 세트 이외의 문자를 모르는 경우 [A-Za-z0- 9) 나는 사용한다), 나는 거의 재미 있다고 말했다. 그것은 약 117.1 비트의 엔트로피 동등 물 (2 ^ 117.1 ~ 1.78 * 10 ^ 35)이며 @Peter가 지적한 것처럼 온라인 공격 을 수행해야 할 가능성이 큽니다 . 압축에 의존하지 않고 모든 암호를 저장 하면 대략 3.6 * 10 ^ 36 바이트 또는 3 * 10 ^ 24 TiB가 필요합니다 (그 수치가 몇 배 정도 잘못되면 누가 신경 쓰겠습니까? ). 임의 키워드 .
CVn

1

안전 예방 조치를 취하는 한 정확히 나쁘지 않습니다. 예를 들어 CSF (Configure Server Firewall)를 설치하고 허용 된 실패 시도 횟수를 설정할 수 있으므로 누군가 시도한 경우 5 회 이상의 실패 시도를 가정하면 자동으로 차단됩니다. 따라서 최고의 답변자의 첫 부분은 전혀 문제가되지 않습니다. 이것은 나에게 여러 번 일어 났으며 운 좋게도 모든 소개 자들이 영구적으로 차단되었습니다. 서버의 경우 서버를 관리하는 유일한 사람이지만 시스템 관리자가 많거나 조직에서 작업하는 경우 서버를 사용하지 않는 경우 큰 문제는 아닙니다. 뿌리. 또한 데스크톱 PC의 경우 많은 소프트웨어를 사용하기 때문에 보안 위험이 있으므로 다른 계정을 사용하는 것이 좋습니다.하지만 서버에서는 신뢰할 수없는 임의의 소프트웨어를 사용하려면 가능한 한 낮게 유지하십시오. 결론은 서버를 올바르게 관리하는 방법을 알고 있다면 실제로 해롭지는 않다는 것입니다.

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