티스토리 뷰
(WebGoat) A2. Cryptographic Failures - Crypto Basics #2 Other Encoding / Hashing
SalaYH 2024. 3. 24. 00:51이번 페이지에서는 Base64 외의 다양한 인코딩 방법에 대해서 안내해주고 있다.
URL encoding과 HTML encoding 인데, 이 두 방법은 웹서비스에서 파라미터를 전달하거나 웹에 출력할 때 자주 사용하는 방법이라 자주 보았던 인코딩 방법이였다. 하지만 다른 UUEncode, XOR encoding은 이번에 처음 본 인코딩 방법이였다.
문제에서는 XOR 인코딩 값을 주고 이 값을 디코딩할 수 있는지 확인해보라는 것이다.
XOR 인코딩이 내부적으로 어떻게 인코딩을 하고 있는지는 사실 중요하지 않다. 왜냐하면 요즈음은 대부분의 인코딩과 디코딩을 제공해주는 무료 웹서비스가 너무 많기 때문이다. 인코딩은 암호화 방식이 아니기 때문에 너무 쉽게 본래 값을 확인할 수 있을 것이다.
간단히 XOR 디코딩을 할 수 있는 웹서비스를 검색하여 문제에서 이야기 하고 있는 값의 디코드 처리를 해보더니, databasepassword 라는 값을 확인할 수 있었다.
소스코드에서도 간단히 입력값이 정답인지 확인하기 위해 하드코딩으로 된 값을 비교하는 로직이 전부였다.
이번 퀴즈에서는 더 이야기 할만 한 것이 없는 것 같다. 일반 현업이였다면, XOR 인코딩 사용을 하지 않아야 하고, 하드코딩으로 패스워드를 저장하면 안된다 등의 이야기를 했을 것이지만, 이건 특별히 이러한 내용을 언급할 필요가 없을 정도로 너무 간단한 퀴즈였기 때문에 여기서 마친다.
다음은 해싱과 관련된 내용이다.
해싱은 일반적으로 패스워드를 저장하거나 메시지의 무결성 검증 등에 사용된다. 해시의 특징은 Plain-text를 Hash로 변경할 수는 있지만, Hash를 Plain-text로 변경할 수는 없다. 하지만 MD5, SHA1, DES 등과 같이 더 이상 안전하지 않은 해시 알고리즘을 사용할 경우, 딕셔너리 공격 등을 통해 Plain-text를 확인할 수 있다.
이번 문제에서는 안전하지 않을 것으로 보이는 해시 알고리즘을 사용한 두 개의 해시정보에 대한 Plain-text를 찾는 것이다.
인코딩/디코딩과 같이 해시값에 대한 딕셔너리 공격을 위한 웹서비스 또한 존재한다. 해당 서비스에 접속하여 두 개의 해시값을 확인해본다.
이를 통해 하나는 secret, 다른 하나는 admin 이라는 값이 해싱된 것을 확인할 수 있었고, 이로서 이번 퀴즈도 통과할 수 있었다.
여기서 소스코드를 확인해보니, 첫 번째 값은 MD5로 만들어졌지만, 두 번째 값은 SHA256으로 만들어 진 것을 확인할 수 있었다.
(해당 서비스는 SHA256 또한 지원하는 것 같군요)
아마도 해당 서비스는 패스워드 등의 해시로 자주 사용되는 딕셔너리 파일이 있고, 이 데이터에 대한 주요 해싱 값을 가지고 있는 것으로 보인다. 이러한 딕셔너리 또는 Brute Force 공격 등을 방지하기 위해서는 중요값(ex. 패스워드)을 해싱할 때는 SALT 값을 적용하여, 자주 사용되는 값을 해싱하더라도 크래킹을 불가능하게 하거나, 크래킹에 걸리는 시간을 훨씬 길게 하도록 하는 것이 좋을 것이다.
추가적으로 패스워드 저장을 위해 해싱을 하는 것이라면, SHA256 사용 또한 안전하다고 보기 어렵다. 최근의 패스워드 저장 시에는 BCrypt 또는 PBKDF2와 같은 안전한 암호화 알고리즘 및 모드를 사용하는 것이 권고되고 있다. 더 이상 SHA256 또한 안전한 해싱 알고리즘에서 제외되어 가는 것으로 보인다.
https://cheatsheetseries.owasp.org/cheatsheets/Password_Storage_Cheat_Sheet.html
Password Storage - OWASP Cheat Sheet Series
Password Storage Cheat Sheet Introduction This cheat sheet advises you on the proper methods for storing passwords for authentication. When passwords are stored, they must be protected from an attacker even if the application or database is compromised. Fo
cheatsheetseries.owasp.org
- Total
- Today
- Yesterday