INDEX
1. Introduce
2. Analysis Scenario
3. Current Local State Analysis
4. Automatic Login Status Analysis
5. Conclusion
6. Reference
1. Introduce
이번 분석 실습에서는 앞선 포스팅에서 다룬 파이어폭스 자동로그인을 바탕으로 필자의 로컬 컴퓨터를 분석하고 복호화하여 비밀번호를 알아내고자한다.
필자는 자동로그인을 무조건 사용하지 않으므로 자동로그인을 사용하지 않은 상태와 자동로그인을 사용한 후의 상태를 나누어 분석하고자 한다.
또한 파이어폭스에서 Primary Password는 설정하지 않았다.
본 분석 실습을 따라할 분께서는 설정된 본인의 Primary Password를 입력하며 진행하길 바란다.
밑의 표에서 사용한 분석 도구를 참고하길 바란다.
Tools Used | Version |
Visual Studio Code | v1.91.1 |
2. Analysis Scenario
- 자동로그인을 사용하지 않은 상태 분석
필자는 자동로그인을 사용하지 않으므로 파이어폭스 비밀번호를 확인 한 Logins.json 열어 복호화된 상태를 확인한다.
그후 NSS 라이브러리 복호화 코드를 통해 복호화를 진행한 후 복호화된 사이트의 비밀번호를 확인한다.
- 자동로그인을 사용한 후 상태 분석
이번엔 자동로그인을 사용한 후 파이어폭스 비밀번호에서 사용된 사이트를 확인한다.
이후 똑같이 Logins.json 를 열어 복호화된 상태를 확인하고 NSS 라이브러리 복호화 코드로 복호화를 진행한 후 복호화된 사이트의 비밀번호를 확인한다.
3. Current Local State Analysis
분석에 앞서 파이어폭스 비밀번호에서 저장된 자동로그인이 없는 것을 확인했다.
복호화 코드 실행에 앞서 필자의 OS는 Windows이므로 nss3.dll를 찾는 경로는 전의 Firefox Auto-Login 포스팅을 참고 바란다.
C:\Users\ounno\AppData\Roaming\Mozilla\Firefox\Profiles
위의 경로에서 본인의 프로필을 찾아 들어간 후 Logins.json을 찾아 열어보자.
{"nextId":6,"logins":[],"potentiallyVulnerablePasswords":[],"dismissedBreachAlertsByLoginGUID":{},"version":3}
호스트이름, 암호화된 사용자이름, 암호화된 비밀번호가 비어있는 것을 확인 할 수 있다.
이제 Python으로 작성된 복호화 코드를 통해 Logins.json을 복호화 해보려한다.
복호화 코드가 1000줄이 넘는 관계로 블로그 코드블럭에 첨부하기에는 부적절하다고 판단되어 따로 넣지는 않겠다.
하지만 복호화 코드는 Reference에 첨부된 깃허브 주소를 통해 확인가능하다.
또한 필요한 사전설정도 Reference에 첨부된 깃허브 주소를 참고하여 설정을 진행하면 된다.
Requirement가 완료되었으면, 복호화 코드를 돌려주면 된다.
코드를 실행하면 프로필을 선택하라고 뜨는데 본인의 프로필을 선택하면 된다.
이후 Primary Password가 설정되어있다면 입력하라고 나오는데 비밀번호를 입력해주면된다.
저장된 자동로그인이 없는 관계로 프로필에서 비밀번호를 찾지 못하였다고 뜬다.
4. Automatic Login Status Analysis
이번엔 한 사이트에서 자동로그인을 등록하고 파이어폭스 비빌번호를 열어 확인하였다.
C:\Users\ounno\AppData\Roaming\Mozilla\Firefox\Profiles
이후 다시 위의 경로에서 본인의 프로필을 찾아 들어간 후 Logins.json을 찾아 열어보니
{"nextId":7,"logins":[{"id":6,"hostname":"https://nid.naver.com","httpRealm":null,"formSubmitURL":"https://nid.naver.com","usernameField":"id","passwordField":"pw","encryptedUsername":"MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECCycfK8alQXNBBAHFN4m1i/H6GCzmMWfWQld","encryptedPassword":"MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECA8+mmo5FWwRBBBXLjd79AvLLJaWsTE8W2JD","guid":"{9cf8f648-5f26-4a59-a9f5-2357d272ac47}","encType":1,"timeCreated":1721192460599,"timeLastUsed":1721192460599,"timePasswordChanged":1721192460599,"timesUsed":1,"syncCounter":1,"everSynced":false,"encryptedUnknownFields":"MDIEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECFgfpbqWl48IBAhFeLUK9j17zg=="}],"potentiallyVulnerablePasswords":[],"dismissedBreachAlertsByLoginGUID":{},"version":3}
저장된 자동로그인의 호스트 이름, 암호화된 사용자이름, 암호화된 비밀번호를 찾을 수 있었다.
또한 Logins-backup.json도 생긴 것을 확인 할 수 있었다.
이제 Ptyhon으로 다시 복호화 코드를 돌려주면
사이트의 ID와 PW가 복호화되어 평문으로 나오는 것을 확인 가능하다.
5. Conclusion
파이어폭스 자동로그인 분석을 통해 복호화로 ID와 PW를 평문으로 알 수 있었으며, 생각한 것보다 더 취약함을 알 수 있었다.
필자는 자동로그인을 사용하지 않았지만 앞으로 더 경각심이 생겼으며, 지인들에게도 자동로그인의 위혐성을 전파할 생각이다.
또한 크롬, 마이크로소프트 엣지등 Chromium 기반의 브라우저 뿐만이 아니라 Gecko 기반의 브라우저 또한 자동로그인에 매우 취약함을 알았다.
그냥 자동로그인 자체를 사용하지 않는 것이 안전해보인다.
사용자 계정정보 탈취에 관한 뉴스사례도 많고 말이다.
6. Reference
[How to decrypt Firefox passwords with Python?]
→ https://medium.com/geekculture/how-to-hack-firefox-passwords-with-python-a394abf18016
[Decrypt Firefox Passwords]
→ https://github.com/unode/firefox_decrypt
'Web Browser Forensic > Firefox' 카테고리의 다른 글
Firefox Auto-Login (0) | 2024.07.17 |
---|