본문 바로가기

보호

/etc/shadow

/etc/shadow 파일은 /etc/passwd 파일과 함께 사용되어 Linux 시스템에서 사용자 계정을 관리합니다. /etc/passwd 파일은 사용자 이름 및 홈 디렉터리와 같은 기본 사용자 정보를 저장하고 /etc/shadow 파일은 암호화된 암호 해시를 저장합니다. 암호 해시를 다른 사용자 정보와 분리함으로써 시스템은 공격자가 /etc/passwd 파일에 대한 무단 액세스 권한을 얻은 경우에 추가적으로 보안을 유지할 수 있습니다.


name:$algorithm$salt$hash:::::::

알고리즘 식별자는 암호 해시 필드의 첫 번째 부분은 해시를 생성하는 데 사용되는 알고리즘을 지정합니다. 이 식별자는 특정 해시 알고리즘에 해당하는 숫자입니다. Linux 및 Unix 기반 시스템에서 사용되는 가장 일반적인 알고리즘은 다음과 같습니다.
$1$: MD5
$2a$, $2y$, $2b$: Blowfish
$5$: SHA-256
$6$: SHA-512

솔트 값은 해시되기 전에 사용자 암호에 추가되는 임의로 생성된 문자열입니다. 솔트 값은 공격자가 미리 계산된 해시 테이블(예: 레인보우 테이블)을 사용하여 암호를 해독하기 훨씬 더 어렵게 만들기 때문에 중요합니다. 솔트 값은 비밀번호 해시 필드의 두 번째 부분에 저장됩니다.

비밀번호 해시는 실제 비밀번호 해시로써 지정된 알고리즘과 솔트 값으로 사용자의 비밀번호를 해시한 결과입니다. 암호 해시는 단방향 암호화이므로 암호를 해독하여 원래 암호를 알 수 없습니다. 사용자가 로그인을 시도하면 시스템은 입력된 암호를 사용하여 해시를 생성하고 이를 /etc/shadow 파일에 저장된 해시와 비교합니다. 두 해시가 일치하면 사용자에게 시스템에 대한 액세스 권한이 부여됩니다.


레인보우 테이블은 암호 해시를 해독하는 데 사용할 수 있는 미리 계산된 테이블입니다. 레인보우 테이블의 목적은 주어진 해시와 일치하는 일반 텍스트 값을 빠르게 검색할 수 있도록 하는 것입니다.

이를 위해 레인보우 테이블에는 미리 계산된 해시 값과 해당 일반 텍스트 값이 포함되어 있습니다. 공격자가 암호 해시를 얻으면 레인보우 테이블을 사용하여 해당 해시와 일치하는 일반 텍스트 값을 조회한 다음 해당 일반 텍스트 값을 사용하여 시스템에 대한 액세스 권한을 얻을 수 있습니다.

그러나 솔트 값을 사용하면 레인보우 테이블에서 각 솔트 값을 개별적으로 설정해야 하므로 레인보우 테이블 사용이 훨씬 더 어려워집니다. 공격자가 가능한 솔트 값 각각에 대해 별도의 레인보우 테이블을 생성해야 한다는 것을 의미하며 가능한 솔트 값이 많은 경우 레인보투 테이블 생성도 어렵습니다.

따라서 솔트 값을 사용하면 공격자가 레인보우 테이블과 같은 미리 계산된 테이블을 사용하여 암호 해시를 해독하기가 훨씬 더 어려워집니다. 이는 공격자가 암호를 해독하기 위해 무차별 대입 방법을 사용하도록 강제하며 훨씬 더 많은 시간과 리소스를 소모할 수 있습니다.