꿈을꾸는 파랑새

오늘은 브라우저에 비밀번호를 저장하면 안 되는 이유와 안전하게 저장하는 방법에 대해 글을 적어 보겠습니다. 브라우저에 저장된 비밀번호를 사용하면 매번 비밀번호를 다시 입력할 필요가 없어 시간이 절약되고 편리합니다. 하지만, 해당 편리한 만큼 위험한 부분입니다.
1. Password stealers(비밀번호 스틸러)
브라우저에 비밀번호를 저장할 때의 핵심 문제는 편리함을 위해 보안을 희생한다는 것입니다. 이는 가장 널리 사용되는 세 가지 브라우저인 Google Chrome(구글 크롬), Firefox(파이어폭스), Microsoft Edge(마이크로소프트 엣지)둥에 적용되며 모두 매우 안전하지 않은 방식으로 사용자 비밀번호를 저장
그 이유는 모든 브라우저가 매우 예측 가능한 위치, 즉 누구에게도 경로가 공개되지 않는 폴더에 비밀번호를 저장하기 때문이며 비밀번호 자체는 암호화되어 있지만, 암호화 키는 가까이에 저장되어 있어 쉽게 액세스할 수 있습니다. 해당키로 공격자는 암호를 해독하고 훔칠 수 있습니다. 문은 단단히 잠겨 있는 것처럼 보이지만 열쇠는 현관 매트 밑이나 우유통 넣는 곳 우편함에 넣는 것처럼 보이는 것입니다.
실제로 브라우저는 이러한 상황을 이용하여 서로 경쟁하며 사용자가 더 쉽게 전환할 수 있도록 저장된 비밀번호를 포함하여 이전 브라우저에서 저장된 모든 데이터를 가져오도록 제안하는 경우가 많이 있습니다.

악성코드(비밀번호 스틸러(Password stealers)라고 자격 증명 도용을 전담하는 해당 악성 코드는 브라우저에 저장된 비밀번호가 포함된 것으로 알려진 폴더를 뒤져 현관 매트 아래 또는 우편함에서 키를 찾은 다음 비밀번호를 해독하고 전리품을 사이버 범죄자의 서버에 업로드합니다. 나중에 이러한 비밀번호는 일반적으로 데이터베이스에 저장되어 계정을 탈취하는 데 사용하는 다른 사기꾼에게 다크 웹에서 대량으로 판매됩니다.
브라우저에 저장된 비밀번호를 훔치기 얼마나 쉬운지 이해하려면 Google Chrome(구글 크롬),Firefox(파이어폭스),Microsoft Edge(마이크로소프트 엣지)에서 비밀번호를 빠르게 추출하는 방법을 Fractional CISO 보안 업체에서 제공하는 동영상입니다.

파이썬으로 구글 크롬 비밀번호 추출 화면
파이썬으로 구글 크롬 비밀번호 추출 화면

2. 컴퓨터에 대한 물리적 접근 
컴퓨터에 물리적으로 접근할 수 있는 모든 사람입니다. 정교한 해킹 기술도 필요하지 않으며 브라우저에 저장된 비밀번호를 추출하는 스크립트는 온라인에서 쉽게 구할 수 있습니다. 필요한 것은 실행하는 것뿐입니다.
지나치게 호기심이 많은 친척이나 직장 동료라도 컴퓨터를 잠금 해제 상태로 두면 해당 작업을 수행할 수 있으며 또는 사무실을 방문하는 어느 사람도 되겠습니다. 기본적으로 누구나 중요한 점은 브라우저에 저장된 모든 비밀번호가 잠재적으로 적대적인 손에 들어가게 된다는 것입니다.
그리고 침입자가 브라우저에 저장된 파일에서 비밀번호를 추출하는 올바른 스크립트가 없더라도 비밀번호가 저장된 사이트 목록의 설정을 샅샅이 뒤진 다음 그 중 하나에 로그인할 수가 있습니다. 
세계에서 가장 인기 있는 브라우저(혹시 모르실 경우를 대비해 구글 크롬 )에는 이러한 행위를 방지하는 기본 메커니즘조차 없습니다. Firefox 개발자는 사용자가 기본 비밀번호를 사용하여 저장된 비밀번호를 보호할 수 있도록 할 만큼 해당 옵션은 기본적으로 비활성화된 상태로 두었습니다. 기본 비밀번호는 명시적으로 활성화 및 구성되어야 하며 많은 파이어폭스 사용자가 이를 아는 경우는 거의 없습니다.
3. 브라우저 계정 하이재킹
사용자가 편의를 위해 계정을 생성하여 다른 장치의 브라우저를 동기화할 수 있도록 허용하는 모든 브라우저에 공통으로 발생하며
즉 북마크,브라우저 세션, 확장 프로그램, 설정 및 저장된 비밀번호가 모두 클라우드에 동기화되어 저장
그리고 해커가 브라우저 계정에 침입한 경우 그들이 해야 할 일은 같은 계정을 사용하여 다른 컴퓨터에 로그인하는 것뿐입니다. 그러면 소셜 네트워크에서 온라인 은행에 이르기까지 브라우저에 비밀번호가 저장된 모든 계정을 가져갈 수가 있습니다.
파이썬으로 하면 다음과 같이 될 것입니다.

def get_master_key(path: str):
    if not os.path.exists(path):
        return

    if 'os_crypt' not in open(path + "\\Local State", 'r', encoding='utf-8').read():
        return

    with open(path + "\\Local State", "r", encoding="utf-8") as f:
        c = f.read()
    local_state = json.loads(c)

    key = base64.b64decode(local_state["os_crypt"]["encrypted_key"])
    key = key[5:]
    key = CryptUnprotectData(key, None, None, None, 0)[1]
    return key


def decrypt_password(buff: bytes, key: bytes) -> str:
    iv = buff[3:15]
    payload = buff[15:]
    cipher = AES.new(key, AES.MODE_GCM, iv)
    decrypted_pass = cipher.decrypt(payload)
    decrypted_pass = decrypted_pass[:-16].decode()

    return decrypted_pass

코드 설명

해당 코드는 특정 파일 경로에서 마스터 키를 가져와 해당 키를 사용하여 비밀번호를 복호화하는 Python 스크립트로 보이게 합니다.
1. get_master_key(path: str) -> bytes:
파일 경로(path)를 입력으로 받음
지정된 경로에 파일이 존재하는지 확인하고 없으면 None 을 반환
path + "\\Local State" 위치의 파일 내용에 os_crypt 문자열이 있는지 확인하고 없으면 마찬가지로 None을 반환
파일(Local State) 내용을 UTF-8 인코딩으로 읽어와 JSON 객체(local_state)로 로드
JSON 객체에서 base64로 인코딩된 암호화된 키를 추출하고 이를 디코드한 뒤 CryptUnprotectData 함수를 사용하여 마스터 키를 획득
마스터 키를 반환
2.decrypt_password(buff: bytes, key: bytes) -> str:
두 매개변수를 받으며 바이트 배열 buff (아마도 암호화된 비밀번호가 포함된 것으로 추정) 및 마스터 키 (key).
buff에서 초기화 벡터(iv)와 페이로드를 추출
주어진 키와 IV를 사용하여 고급 암호화 표준(AES) 알고리즘의 Galois/Counter Mode(GCM)로 페이로드를 복호화
복호화된 페이로드에서 마지막 16바이트를 제거
그리고 나온 바이트를 문자열로 디코딩
복호화된 비밀번호를 문자열로 반환
대충 이런 식으로 가능합니다.
그럼 브라우저에서 저장된 비밀번호를 삭제하는 방법은 CCleaner를 통해서 삭제하는 방법입니다. 먼저 CCleaner를 실행을 하고 나서 여기서 보면 저장된 비밀 번호 부분이 있을 것입니다. 해당 부분을 체크를 해서 삭제를 하면 됩니다. 다른 브라우저를 사용하고 있다고 하면 애플리케이션으로 이동해서 자신이 사용하는 브라우저 부분에서 저장된 비밀 번호를 체크를 해서 클리너 실행을 해서 삭제를 하시면 됩니다.

CCleaner 로 브라우저에 저장된 비밀번호 삭제
CCleaner 로 브라우저에 저장된 비밀번호 삭제

이런 문제를 해결하는 방법은 간단합니다. 당장 브라우저에서 저장된 비밀번호를 지우고 그리고 1Password, Bitwarden,LastPass,Keeper,Sticky password,KeePass 등과 같은 비밀번호 전용 관리 프로그램을 추천하면 그리고 해당 프로그램들을 사용하더라도 2단계 인증은 필수적으로 해 놓아야 안전하게 사용을 하는 방법입니다.
결론: 브라우저에 비밀번호를 저장하지 말고 비밀번호 전용 프로그램을 사용하는 것 그리고 백신 프로그램 및 윈도우 업데이트 들을 잘해서 악성코드에 감염되는 것을 차단하는 것입니다. KeePass 같은 경우 온라인 연결이 필요 없이 사용을 할 수가 있으므로 오히려 서버와 동기화되는 제품 들보다는 안전하다고 할 수가 있음

공유하기

facebook twitter kakaoTalk kakaostory naver band