답변:
해시를 되돌릴 수는 없지만 일치하는 것을 찾을 때까지 가능한 모든 암호를 해시하려고 시도 할 수 있으며 파일에 대한 우수한 하드웨어 및 로컬 액세스로 초당 수백만 번의 시도를 할 수 있습니다.
파일에 644
권한이있는 경우 게스트 세션에서도 시스템에 로그인 한 사람은이 파일을 컴퓨터에서 복사하여 (USB 스틱 또는 원격을 통해 원격으로 scp
) 오프라인 무차별 대입 공격을 시도 할 수 있습니다. , 당신의 컴퓨터에이 모든 증거를 남기지 않고 .
Ubuntu에 대한 권한은 실제로 640
는 아닙니다 600
.
$ ls -l /etc/shadow
-rw-r----- 1 root shadow 1239 Jun 25 04:35 /etc/shadow
그래도 다른 사람에 대한 권한이 없으며 기본적으로 shadow
그룹에 아무도 없기 때문에 이것은 중요하지 않습니다 .
원래 해시는 리눅스가 만들어 졌을 때와 같이 해시가 저장되어 /etc/passwd
있기 때문에 passwd
해시를 크래킹하는 것은 사실상 불가능했습니다. 그러나 결국 상대적으로 취약한 암호로 해시를 크래킹 할 수있는 수준까지 처리 능력이 향상되었습니다.
의 권한 변경 /etc/passwd
에 640
또는 600
것하지 작업, 많은 합법적 인 이유를 읽을 수 있기 때문에 /etc/passwd
해시가 이동했다, 그래서 (등, 사용자 이름에 UID를 변환 사용자의 전체 이름, 전화 번호를 받고) 일반 사용자로 /etc/shadow
, 640
권한 이 부여되었습니다 . x
에서 사용자의 암호 해시 필드 대신에 /etc/passwd
사용되는 해당 사용자의 해시가 저장되어 있음을 나타냅니다 /etc/shadow
대신.
ls
uid에서 이름으로 변환하기 위해 setuid root 와 같은 유틸리티 가 필요하지 않음을 의미합니다 .
실제로 / etc / shadow는 공개적으로 읽을 수있는 사용자 이름 및 비밀번호 목록 에서 벗어날 수 있도록 만들어졌습니다 .
우리가 실제 답변을 얻기 전에 약간의 역사 수업이 될 것입니다. 역사에 관심이 없다면 조금 아래로 스크롤하십시오.
예전에는 Linux를 포함한 유닉스 계열 OS가 일반적으로 비밀번호를 / etc / passwd에 보관했습니다. 이 파일은 세계적으로 읽을 수 있지만 여전히 숫자 사용자 ID와 사용자 이름 간의 맵핑을 허용하는 정보가 포함되어 있기 때문에 여전히 읽을 수 있습니다. 이 정보는 일반 사용자에게도 합법적 인 목적으로 매우 유용하므로 파일 세계를 읽을 수있게하는 것이 유용성에 큰 도움이되었습니다.
당시에도 사람들은 로그인 할 수있는 누구나 읽을 수있는 잘 알려진 위치에 파일에 일반 텍스트로 비밀번호를 저장하는 것이 나쁜 생각임을 깨달았습니다. 그래서 암호는 어떤 의미에서 해시되었습니다. 그것은 구식 "암호"암호 해싱 메커니즘으로, 현대 시스템에서는 거의 사용되지 않지만 종종 레거시 목적으로 지원됩니다.
시스템에서 / etc / passwd를 살펴보십시오. x
어디에나 나오는 두 번째 필드를 보 시겠습니까? 해당 계정의 해시 비밀번호를 보유했습니다.
문제는 사람들이 / etc / passwd를 다운로드하거나 다운로드하지 않고 암호를 해독 할 수 있다는 것입니다. 컴퓨터가 특히 강력하지 동안이 큰 문제가 아니었다 (클리포드 스톨은,에 뻐꾸기의 알 내가 기억으로, 두 번째 약으로, 1980 년대 중반에 IBM PC 수준의 시스템에 해시 한 암호에 시간을 제공합니다 처리 능력이 증가함에 따라 문제가되었습니다. 어느 시점에서 적절한 단어 목록을 사용하면 암호를 해독하는 것이 너무 쉬워졌습니다. 기술적 인 이유로이 체계는 8 바이트보다 긴 암호도 지원할 수 없습니다.
이 문제를 해결하기 위해 두 가지 작업을 수행했습니다.
이 파일은 / etc / shadow입니다.
/ etc / shadow와 함께 작동하는 소프트웨어는 일반적으로 매우 작고 집중 성이 높으며 문제 가능성으로 인해 검토 과정에서 추가 검사를받는 경향이 있습니다. 또한 특수 권한으로 실행되어 일반 사용자가 해당 파일을 볼 수 없도록 / etc / shadow를 읽고 수정할 수 있습니다.
그래서 당신이 그것을 가지고 : 해당 파일의 전체 목적은 민감한 데이터에 대한 액세스를 제한 할 수 있기 때문에 (확실히 당신이 상태로 제한적으로, 이미 지적하지만)을 / etc / 그림자에 대한 사용 권한이 제한적입니다.
암호 해시는 강력해야하지만 암호가 인터넷 목록 의 상위 500 개 암호에 있으면 해시에 액세스 할 수있는 사람은 누구나 빠르게 암호를 찾을 수 있습니다. 해시를 보호하면 간단한 공격을 막을 수 있고 성공적인 공격에 대한 기준이 간단한 엿보기에서 이미 호스트의 시스템 관리자가되거나 권한 에스컬레이션 공격을 먼저 수행 할 수 있습니다. 특히, 제대로 관리 다중 사용자 시스템에서, 그 모두는 크게 다만 세계 읽을 수있는 파일을보고보다 더 어렵습니다.
/etc/shadow
"새도우 암호"를 보유하지 않습니다 (그렇지 않기 때문에). 전체 파일은 그림자입니다 /etc/passwd
. 리눅스 섀도우 패스워드 하우투에서이 용어가 사용되는 방식을 살펴보십시오 . 왜 passwd 파일을 섀도 잉합니까? . 컴퓨팅에서 "섀도우"라는 용어를 사용하는 것과 달리 쉐도우 복사본 은 아닙니다 (ROM에서 실행되는 대신 BIOS로 BIOS 코드를 섀도 잉하는 것과 같이). / etc / passwd의 필드는 "실제 암호 해시가 / etc / shadow에 있음"을 나타내는 특수 문자를 포함하는 자리 표시 자입니다.
/ etc / shadow 파일에 대한 권한이 600으로 설정된 이유는 무엇입니까?
누가 그랬어?
$ls -l /etc/shadow
-rw-r----- 1 root shadow 1407 mei 18 10:05 /etc/shadow
간단한 대답 : Linux의 권한이 심각합니다. "다른 사람들"이 (으)로 무엇인가를 할 이유가 없습니다 /etc/shadow
. 그리고 그룹 "shadow"가 그것에 쓸 이유가 없습니다. 그리고 실행이 잘못되었습니다.
그러나 내부의 모든 비밀번호는 일반 텍스트로 저장되지 않고 해시로 저장되므로 해시에서 원래 비밀번호를 계산할 수없는 이유는 무엇입니까?
그렇게해야 할 이유가 하나도 없기 때문입니다.
해시는 단방향입니다. 누군가에게 읽기 권한을 부여하면 스크립트를 사용하여이 단방향을 남용 할 수 있습니다. 상상할 수있는 단어를 나열하고 해시를 만드십시오. 어떤 시점에서 비밀번호와 일치 할 수 있습니다. 그래도 시간이 걸릴 수 있습니다.
이 답변 은 흥미롭고 무차별 강제력에 대한 추정치를 가지고 있습니다.
중요한 배경 : /etc/shadow
비밀번호 해시를 숨기려는 목적으로 만 존재합니다. 초창기 유닉스의 초기에는 암호 해시가에 저장되었습니다 /etc/passwd
. 컴퓨터가 더욱 강력 해지고 네트워크 연결이 더욱 강력 해지고 보안 공격이 더 정교 해짐에 따라 사람들은 암호 해시를 단어로 읽을 수있게하는 것이 문제가된다는 것을 깨달았습니다. (나는 악용에 대해 자세히 설명하지 않습니다. 이미 그것에 대한 충분한 답변이 있습니다.)
그러나 /etc/passwd
읽기 보호 할 수는 없습니다 : 모든 종류의 프로그램에서 숫자 사용자 ID를 사용자 이름에 매핑하고 홈 디렉토리, 기본 쉘, 사용자의 전체 이름 (및 사무실 번호 등을 확인하는 데 사용됨 man finger
) . 따라서 민감한 부분 인 암호 해시가 (으)로 이동 /etc/shadow
했으며 나머지는 그대로 유지되었습니다. 이유 있다고 /etc/passwd
, 이름을 despide, 모든 것을 포함 제외한 제 (해시) 비밀 번호를.
/etc/shadow
하다을600
?