Mac 비밀번호는 어떤 유형의 해시에 저장됩니까?


22

OS X 10.11-사용자 .plist파일을 열고 파일 내부를 살펴 보았습니다.

다음 명령 으로이 작업을 수행했습니다.

sudo defaults read /var/db/dslocal/nodes/Default/users/<username>.plist ShadowHashData|tr -dc 0-9a-f|xxd -r -p|plutil -convert xml1 - -o -

파일이 말 SALTED-SHA512했으므로 SHA512 해시라고 가정했습니다.

그러나 몇 개의 SHA512 해시 생성기 사이트로 이동하여 암호를 입력했습니다. .plist파일 에있는 것과 다른 해시를 얻었습니다 .

그렇다면 .plist파일의 내용을 실제 해시로 변환하거나 파일에 어떤 유형의 해시가 저장되어 있는지 어떻게 변환 합니까?


2
어떤 종류의 OS X 암호를 해독하려고합니까? OS X 10.7 / 10.8? 내 파일에 SALTED-SHA512-PBKDF2(OS X 10.10) 이라고 표시되어 있기 때문에 !
klanomath

@klanomath OS X El Capitan; 그것이 바로 PBKDF2가 민감한 데이터인지 확실하지 않은 것입니다. SALTED-SHA512-PBKDF2가 유형입니까? 그렇다면이 유형을 생성 할 수있는 c ++ 함수 / 라이브러리가 있습니까? (바람직하게 빠른 기능 / 라이브러리)
Flare Cat

OS X 비밀번호 해시가 저장되어 있다고 생각 /var/db/shadow/hash했습니까?
음성

1
@ tjt263 on Yosemite +
Flare Cat

답변:


40

비밀번호 크래킹 (OS 10.8 이상에서 유효)

먼저 나는 당신의 명령을 설명하고 싶습니다 :

sudo defaults read /var/db/dslocal/nodes/Default/users/user.plist ShadowHashData|tr -dc 0-9a-f|xxd -r -p|plutil -convert xml1 - -o -

명령의 첫 번째 부분은 plist에서 키 ShadowHashData 를 읽습니다.

sudo defaults read /var/db/dslocal/nodes/Default/users/user.plist ShadowHashData

결과 (대부분 16 진) :

(
    <62706c69 73743030 d101025f 10145341 4c544544 2d534841 3531322d 50424b44 4632d303 04050607 0857656e 74726f70 79547361 6c745a69 74657261 74696f6e 734f1080 c5f19863 9915a101 c99af326 dffe13e8 f14456be 8fd2312a 39a777b9 2178804e 204ca4fe e12a8667 871440ef f4288e81 1d86d746 c6d96a60 c919c341 8dfebba4 2f329f5d 73c0372d 636d61d5 dfda1add 61af36c7 0e4acd77 12761072 09e643ae 92a0f43e 95a45274 4e50fb45 40d9bdf4 e0b70172 5d7db488 fbe18c1a b7737c6b 4f10200d ba6246bd 38266b2e 827ff7e7 27138075 7c71d653 893aa361 d5902398 30236911 c160080b 22293136 41c4e700 00000000 00010100 00000000 00000900 00000000 00000000 00000000 0000ea>
)

명령의 두 번째 부분은 tr -dc 0-9a-f0-9a-f를 제외한 모든 것을 제거합니다.

결과 (16 진) :

62706c6973743030d101025f101453414c5445442d5348413531322d50424b444632d303040506070857656e74726f70795473616c745a697465726174696f6e734f1080c5f198639915a101c99af326dffe13e8f14456be8fd2312a39a777b92178804e204ca4fee12a8667871440eff4288e811d86d746c6d96a60c919c3418dfebba42f329f5d73c0372d636d61d5dfda1add61af36c70e4acd771276107209e643ae92a0f43e95a452744e50fb4540d9bdf4e0b701725d7db488fbe18c1ab7737c6b4f10200dba6246bd38266b2e827ff7e7271380757c71d653893aa361d590239830236911c160080b2229313641c4e700000000000001010000000000000009000000000000000000000000000000ea

세 번째 부분은 xxd -r -p그것을 (mal-formed) 바이너리로 되돌립니다 :

?bF?8&k.???'?u|q?S?:?aՐ#?0#i?`WentropyTsaltZiterationsO???c??ɚ?&????DV???1*9?w?!x?N L???*?g?@??(????F??j`??A????/2?]s?7-cma????a?6?J?wvr    ?C????>??RtNP?E@ٽ??r]}?????s|kO                              ")16A??    ?

마지막 부분 plutil -convert xml1 - -o -은 잘 구성된 xml plist를 만듭니다.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>SALTED-SHA512-PBKDF2</key>
    <dict>
        <key>entropy</key>
        <data>
        xfGYY5kVoQHJmvMm3/4T6PFEVr6P0jEqOad3uSF4gE4gTKT+4SqGZ4cUQO/0
        KI6BHYbXRsbZamDJGcNBjf67pC8yn11zwDctY21h1d/aGt1hrzbHDkrNdxJ2
        EHIJ5kOukqD0PpWkUnROUPtFQNm99OC3AXJdfbSI++GMGrdzfGs=
        </data>
        <key>iterations</key>
        <integer>49504</integer>
        <key>salt</key>
        <data>
        DbpiRr04Jmsugn/35ycTgHV8cdZTiTqjYdWQI5gwI2k=
        </data>
    </dict>
</dict>
</plist>

실제 파일이 대체 얻으려면 -o -하여-o ~/Desktop/tempuser.plist

plist에는 iterations , entropysalt의 세 가지 주요 부분이 있습니다 .

반복 은 정수이지만 엔트로피소금 은 base64로 인코딩됩니다. 그것들을 계속 사용하려면 해독하고 xxd해야합니다.

솔트 를 해독하려면 데이터 부분에서 모든 공백과 줄 바꿈을 제거하고

echo  "salt_data" | base64 -D | xxd -p | tr -d \\n > salt

위의 내 데이터로

echo  "DbpiRr04Jmsugn/35ycTgHV8cdZTiTqjYdWQI5gwI2k=" | base64 -D | xxd -p | tr -d \\n > ~/Desktop/salt

소금 (16 진수) 결과 :

0dba6246bd38266b2e827ff7e7271380757c71d653893aa361d5902398302369

엔트로피도 마찬가지입니다.

echo  "xfGYY5kVoQHJmvMm3/4T6PFEVr6P0jEqOad3uSF4gE4gTKT+4SqGZ4cUQO/0KI6BHYbXRsbZamDJGcNBjf67pC8yn11zwDctY21h1d/aGt1hrzbHDkrNdxJ2EHIJ5kOukqD0PpWkUnROUPtFQNm99OC3AXJdfbSI++GMGrdzfGs=" | base64 -D | xxd -p | tr -d \\n > ~/Desktop/entropy

엔트로피 (16 진수) 결과 :

c5f198639915a101c99af326dffe13e8f14456be8fd2312a39a777b92178804e204ca4fee12a8667871440eff4288e811d86d746c6d96a60c919c3418dfebba42f329f5d73c0372d636d61d5dfda1add61af36c70e4acd771276107209e643ae92a0f43e95a452744e50fb4540d9bdf4e0b701725d7db488fbe18c1ab7737c6b

hashcat 이 암호를 해독하기 위해 텍스트 파일이 필요한 경우 찾은 해시 데이터를 단일 문자열로 결합해야합니다.

$ml$<iterations(integer)>$<salt(hex)>$<entropy(hex)>

내 예제 해시 데이터는 다음과 같습니다.

$ml$49504$0dba6246bd38266b2e827ff7e7271380757c71d653893aa361d5902398302369$c5f198639915a101c99af326dffe13e8f14456be8fd2312a39a777b92178804e204ca4fee12a8667871440eff4288e811d86d746c6d96a60c919c3418dfebba42f329f5d73c0372d636d61d5dfda1add61af36c70e4acd771276107209e643ae92a0f43e95a452744e50fb4540d9bdf4e0b701725d7db488fbe18c1ab7737c6b

이것을 hash.txt라는 파일에 저장하고 hashcat에서 사용하십시오. 암호를 찾기위한 적절한 무차별 강제 명령 (= 4 자리 만 포함하는 간단한 테스트 암호)은 다음과 같습니다.

./hashcat-cli64.app -m 7100 hash.txt -a 3 ?d?d?d?d

VM에서 3 분 크래킹 후 생성 된 비밀번호는 1111 입니다.


반대의 경우 : ShadowHashData 생성 (OS 10.8 이상에서 유효)

이것은 단순한 SHA512 해시 생성기를 사용하여 "암호"데이터를 작성할 수없는 이유를 설명합니다. SHA512는 여전히 중요합니다. 배경은 PBKDF2-Key_derivation_process에 설명되어 있습니다 .

당신이 필요합니다 :

  • PRF는 출력 길이가 hLen 인 두 매개 변수의 의사 난수 함수입니다 (예 : 키가있는 HMAC).
  • 비밀번호는 파생 키가 생성되는 마스터 비밀번호입니다.
  • 소금은 암호화 소금으로 알려진 일련의 비트입니다.
  • c는 원하는 반복 횟수입니다
  • dkLen은 파생 키의 원하는 길이입니다.

DK = PBKDF2 (PRF, Password, Salt, c, dkLen)를 만들려면

SALTED-SHA512-PBKDF2 (비밀번호에 의존하는 중간 plist의 유일한 부분)에서 DK ~ 엔트로피 키 를 만들려면 php hash_pbkdf2를 사용 하십시오 .

string hash_pbkdf2 ( string $algo , string $password , string $salt , int $iterations [, int $length = 0 [, bool $raw_output = false ]] )

터미널에 (PHP ⩾ 5.5 필요) 다음을 입력하십시오.

php -a
Interactive shell

php > $password = "1111";
php > $iterations = 49504;
php > $length = 256;
php > $salt = "\x0d\xba\x62\x46\xbd\x38\x26\x6b\x2e\x82\x7f\xf7\xe7\x27\x13\x80\x75\x7c\x71\xd6\x53\x89\x3a\xa3\x61\xd5\x90\x23\x98\x30\x23\x69";
php > $hash = hash_pbkdf2("sha512", $password, $salt, $iterations, $length);
php > echo $hash;

c5f198639915a101c99af326dffe13e8f14456be8fd2312a39a777b92178804e204ca4fee12a8667871440eff4288e811d86d746c6d96a60c919c3418dfebba42f329f5d73c0372d636d61d5dfda1add61af36c70e4acd771276107209e643ae92a0f43e95a452744e50fb4540d9bdf4e0b701725d7db488fbe18c1ab7737c6b
php > 

$ salt에 사용 된 문자열은 솔트 (16 진)의 이스케이프 된 16 진 (\ x) 표시입니다.
0dba6246 ...-> \ x0d \ xba \ x62 \ x46 ...

해시 알고리즘 (Mac 10.8 이상에서는 sha512 여야 함), 반복 (0보다 크고 2 ^ 32-1보다 작은 숫자), salt (길이는 64 바이트 16 진수이지만 임의 임)를 정의하거나 알 수 있으므로 length (256 바이트) 위의 모든 명령을 반대로하여 올바른 형식의 중간 plist 파일을 만들 수 있습니다.

첫 번째 단계에서 명령 (더 나은 각 하위 명령)을 취소 하면 중간 plist를 사용하여 원래 plist에서 키 ShadowHashData 의 데이터를 작성할 수 있습니다 .


그리고 마지막으로 귀하의 질문에 대답하십시오 : OS X 암호 (및 소금과 같은 다른 데이터)를 처리하는 데 사용되는 해시 알고리즘은 SHA512입니다. 그러나 사용자 비밀번호가 SHA512 hash 로 저장되어 있다고 말할 수는 없습니다 .

귀하의 비밀번호와 소금은 sha512에 의해 여러 번 구워지며 결과는 base64 's 및 xxd '입니다. 함께 함께 소금반복 이 xxd'ed있어 다시 base64'ed.

나는 한 걸음도 잊지 않았기를 바랍니다.


2
예외적 인 답변이 있지만 여기에 모두 모아 놓은 스크립트 모음이 있습니다. 이것을 구현하려고 할 때 알게 된 한 가지 흥미로운 점은 Dklen이 128이라는 것입니다.
3martini

2
이것은 놀라운 답변입니다. 나는 그것이 github.com/octomagon/davegrohl에
bmike

@bmike는 해시를 크랙하려고 시도하지 않는다는 점을 감안할 때 그리 많지 않습니다. 그러나 github.com/octomagon/davegrohl 에는 사용자 암호 해시를 해독하지 않고 화면에 덤프하는 옵션이 있습니다. 이것이 해시 캣 형식입니다.
dardo82

@ 3martini 당신이 맞아요, 나도 알아 냈습니다. 여기 내 쉘 스크립트 버전이 있습니다 : gist.github.com/dardo82/a529db7a191f375ef401adfea7156b6d
dardo82

0

해당 시스템에서 사용자 계정의 소금이 필요합니다. 계정을 만들 때 (또는 비밀번호를 마지막으로 변경했을 때) 사용자를 위해 고안된 임의의 문자열입니다. 비밀번호에 비밀번호를 추가해야합니다. 예 :

[그 다음에 엄청난 수의 숫자가 ...] [비밀번호]

[yourPassword] [salt]이 (가) 앞이나 뒤에 추가되어 있는지 확실하지 않습니까? 누가 알아.

사용자 USERNAME는 여기에서 해시를 볼 수 있습니다.

sudo plutil -p /var/db/dslocal/nodes/Default/users/**USERNAME**.plist

그런 다음 나옵니다.

"ShadowHashData" => [
  0 => <62706c69 73743030 d2010203 04524e54 5f101453 414c5445 442d5348 41353132 2d50424b 4446324f 1010f5d1 dcc424b1 a6173adf 2b69b6b4 e043d305 06070809 0a57656e 74726f70 79547361 6c745a69 74657261 74696f6e 734f1080 8d6f15f8 36cf219f c4854634 62706c69 15f23eec 1615bb8a 04524e54 48dcd5fa c6e45319 faf0f12a ae0bebb0 7881dcdd 92fab792 9f354bf8 04524e54 a50cad3b d04e867b 689fbaa5 e1be59ff be37c6f3 60e41e59 3fdc0702 f296c9f9 8aedd2d6 77f5608a 337add70 5a6b39ba 64665f54 a85adb30 54b791d1 62706c69 aa4d0c9a 4f1020a2 99ead6a5 42730425 41353132 01247c53 6442646a 41353132 e2555d2e a3baee11 8e0b0008 000d0010 0027003a 00410049 004e0059 00dc00ff 00000000 00000201 00000000 0000000b 00000000 00000000 00000000 00000102>

흥미롭게도, 위의 무작위로 보이는 숫자 블록 중 일부를 변경 했으므로 Stack은 소금을 얻지 못합니다 (내 붙여 넣기 작업 인 무작위 블록이 반복적으로 나타날 수 있습니다!). 하지만 끝에있는 블록 위에 붙여 넣지 않았습니다 …이 512 SHA 해시가 흥미로워지면 0으로 녹는 것처럼 보입니다!

추신. 그들은 그것을 조금 움직여서 ... 실제로 잘 숨겨져있었습니다. 나는 길을 잃었고 내 것을 찾을 수 없었습니다 (아래 참조). 'Nam!

sh-3.2 # 암호
/ var / db / uuidtext
sh-3.2 # ls -R
00 10 20 30 40 50 60 70 80 90 A0 B0 C0 D0 E0 F0 dsc
01 11 21 31 41 51 61 71 81 91 A1 B1 C1 D1 E1 F1
02 12 22 32 42 52 62 72 82 92 A2 B2 C2 D2 E2 F2
03 13 23 33 43 53 63 73 83 93 A3 B3 C3 D3 E3 F3
04 14 24 34 44 54 64 74 84 94 A4 B4 C4 D4 E4 F4
05 15 25 35 45 55 65 75 85 95 A5 B5 C5 D5 E5 F5
06 16 26 36 46 56 66 76 86 96 A6 B6 C6 D6 E6 F6
07 17 27 37 47 57 67 77 87 97 A7 B7 C7 D7 E7 F7
08 18 28 38 48 58 68 78 88 98 A8 B8 C8 D8 E8 F8
09 19 29 39 49 59 69 79 89 99 A9 B9 C9 D9 E9 F9
0A 1A 2A 3A 4A 5A 6A 7A 8A 9A AA BA CA DA EA FA
0B 1B 2B 3B 4B 5B 6B 7B 8B 9B AB BB CB DB EB FB
0C 1C 2C 3C 4C 5C 6C 7C 8C 9C AC BC CC DC EC FC
0D 1D 2D 3D 4D 5D 6D 7D 8D 9D AD BD CD DD ED FD
0E 1E 2E 3E 4E 5E 6E 7E 8E 9E AE는 CE DE EE FE입니다.
0F 1F 2F 3F 4F 5F 6F 7F 8F 9F AF BF CF DF EF FF

./00 :
229B1EE4463244AED56CD907B7BEF5 41D012E18834E9A89637A804BE488C A7D6EBD5D63A45918E4C3DCD479708
28400DB8373232B480C57B68EFA51D 7EE5E1A8A839CE9EBB017702B87E4A AE3ABF3C8333BF8A4917C38946F37F

./01 :
56B34D8B03387CA319BDC11BEFB2ED A8359C18A633C9815A5C528BCD7E18 DD590C6953D428FEFCA59CDAD53349
62DA3DA0C73CE2AA227F372A727765 C05AE85AE73DF492529DCD10F0F60B ECD5DB35653A50ABCA585948E1295C

./02 :
C7513934DD9D8EB73B4B0765D8 98F679561A3957947E381448224549 DBAB00E98835D2853386FF37C39FB7 FA85B4876B3E1D81B742C6C1F8D368
541FAC57203B75BD333F7EC33EBD32 C25AE52FA438AD9006931512A8A522 EFA98EEFF13799BFDFDE3033209EC2
3234B636EEA71A903E204E9599 CA252B6EA03E5A811ACFC88F0987C0 F815F784DC35A5B1D5F658F1DB666B

./03 :
FA758E3DA4996D1CD5FF53B7EA 419205BFBB3469BCDCFE528FDE2C9B 73F0433FBB35A0AD1CD160020F60F0 D0034745E035D183CB344308FC05E5
26539F480B31D8B65F1495C85AADE2 69BF1B56BB30DE9BBE83BD3FDAB067 A7CA24A6E1E06B3F20084298054F41 D9727CA86A396CAD1CC1B1BD1FA8DF

./04 :
87C3CF30E3ADCCDBD0A0D56913 B398A52A3C3041B8C89F91CB154B25 C004143AB43CD18D5808C2A3017BDE F478D3BCB6313782CBBD803691DE4F
99FBF1F9B439EB92551A096F187EC3 BA704190633F04B0BB5DE3ECB6C013 CA7AE366FA34BD86DB77974A1A4BED

./05 :
67AE763654A52CBF399D33EB29 4D4B7528803C138C4D2330B51326C1 7B6C998C5331159A4ADC1F73D72E71 BEEC66F8573CF0BE339189FD1A688B
11E586F995DADC9A6E2AC531963BD2 503FAB2A9C331A95670849CC595B30 8C0FAFB09A3526BEAA3A06976C42E7 CCC4737FBE915B2A8C636060DFDE78
138A1B31EC95D1588BF15328A2 560F3EDCED38B29C14CAB39287EA26 988FAB9E6E70E0C21C9424703A5895 E1A892FA8D378C8C6BA9376A74EB00
2669F6338C3AF9A9FBF365EE3294F3 708E7FDA333D6E951F5870047A266B 98E3BB24DF3BE8B49D27EE2F30DA42
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.