개요
브라우저의 세션 복구(Session Restore) 기능은 예기치 못한 브라우저 종료나 충돌 발생 시 사용자가 이전에 열어놓았던 탭과 창을 자동으로 복원하는 기능입니다1. 이 기능은 사용자 편의성을 크게 향상시키지만, 동시에 심각한 보안 위험을 내포하고 있어 메타마스크(MetaMask) 해킹 사건의 핵심 취약점으로 주목받기도 했습니다2.
세션 복구 기능의 작동 원리
기본 메커니즘
세션 복구 기능은 브라우저가 현재 열려있는 탭과 창의 정보를 주기적으로 디스크에 저장하는 방식으로 작동합니다1. Firefox의 경우 sessionstore.js
또는 sessionstore.jsonlz4
파일에 세션 정보를 저장하며3, Chrome은 Sessions
폴더 내의 Current Session
과 Current Tabs
파일을 통해 세션 데이터를 관리합니다4.
데이터 저장 방식
브라우저는 세션 복구를 위해 다음과 같은 정보들을 디스크에 저장합니다13:
- 탭 URL 정보: 각 탭에서 열려있던 웹사이트 주소
- 폼 데이터: 사용자가 입력한 텍스트 필드 내용
- 스크롤 위치: 페이지 내에서의 스크롤 위치
- 브라우저 창 상태: 창의 크기, 위치 등
- 세션 상태: 로그인 상태 및 쿠키 정보
브라우저별 세션 복구 구현
Firefox
Firefox는 가장 강력한 세션 복구 기능을 제공합니다1. 주요 특징은 다음과 같습니다:
- 자동 복구: 충돌 발생 시 자동으로 세션 복원 페이지 표시
- 설정 옵션: 시작 시 이전 세션 자동 복원 설정 가능
- 백업 시스템:
sessionstore-backups
폴더에 여러 세션 백업 보관56 - 보안 주의사항: 세션 복원 시 로그인 상태도 함께 복원됨7
Chrome
Chrome의 세션 복구는 상대적으로 제한적입니다89:
- 5초 제한: 브라우저 시작 후 5초 내에만 복구 버튼 표시
- 수동 복구: “최근에 닫은 탭” 메뉴를 통한 개별 탭 복구
- 확장 프로그램: Session Buddy 같은 확장 프로그램으로 기능 보완8
기타 브라우저
세션 데이터 저장 위치
Firefox
textWindows: %APPDATA%\Mozilla\Firefox\Profiles\[profile]\sessionstore.jsonlz4
macOS: ~/Library/Application Support/Firefox/Profiles/[profile]/sessionstore.jsonlz4
Linux: ~/.mozilla/firefox/[profile]/sessionstore.jsonlz4
Chrome
textWindows: %LOCALAPPDATA%\Google\Chrome\User Data\Default\Sessions\
macOS: ~/Library/Application Support/Google/Chrome/Default/Sessions/
Linux: ~/.config/google-chrome/Default/Sessions/
보안 취약점과 위험성
CVE-2022-32969: “악마의 취약점”
2022년 발견된 가장 심각한 세션 복구 관련 취약점으로, 메타마스크 지갑 해킹의 원인이 되었습니다211:
취약점 메커니즘:
- 브라우저가 비밀번호가 아닌 텍스트 입력 필드의 내용을 평문으로 디스크에 저장
- 메타마스크의 시드 구문 입력 필드가 password 타입이 아닌 일반 텍스트 필드로 구현
- 세션 복구 기능이 이러한 민감한 정보까지 디스크에 캐시로 저장
공격 시나리오:
- 사용자가 메타마스크에서 “비밀번호 복구 문구 조회” 기능 사용
- 브라우저가 해당 내용을 세션 복구용 캐시 파일에 평문 저장
- 공격자가 물리적 또는 원격 접근을 통해 캐시 파일 탈취
- 시드 구문을 이용하여 암호화폐 지갑 완전 탈취
기타 보안 위험
- SessionStore 기능을 통한 크로스 사이트 스크립팅 공격 가능
- 악성 스크립트가 세션 데이터에 주입되어 다른 도메인으로 전파
- 공용 컴퓨터 사용 시 다른 사용자가 이전 세션에 접근 가능
- 로그인 상태가 세션과 함께 복원되어 보안 위험 증대
세션 복구 보안 강화 방안
사용자 차원의 대응
세션 복구 기능 비활성화14:
textFirefox: about:config → browser.sessionstore.enabled → false
민감한 작업 시 주의사항:
- 암호화폐 지갑 등 민감한 애플리케이션 사용 시 시크릿 모드 활용
- 공용 컴퓨터에서는 세션 복구 기능 사용 금지
- 브라우저 종료 시 세션 데이터 자동 삭제 설정
개발자 차원의 대응
보안 쿠키 설정15:
- HttpOnly, Secure, SameSite 플래그 적절히 설정
- 세션 타임아웃을 10분 이내로 제한16
폼 필드 보안:
- 민감한 정보 입력 시 password 타입 필드 사용
- 자동완성 및 브라우저 캐싱 비활성화
세션 스토리지와의 차이점
세션 스토리지(Session Storage)
세션 스토리지는 웹 애플리케이션에서 사용하는 클라이언트 측 저장소입니다1718:
특징:
- 탭 단위로 격리된 저장 공간
- 탭 종료 시 데이터 자동 삭제
- 5-10MB 저장 용량 제한
- JavaScript를 통한 접근
브라우저 세션 복구와의 차이
구분 | 브라우저 세션 복구 | 세션 스토리지 |
---|---|---|
저장 주체 | 브라우저 자체 | 웹 애플리케이션 |
저장 위치 | 디스크 (평문) | 메모리 + 디스크 |
접근 방법 | 브라우저 내부 | JavaScript API |
보안 수준 | 낮음 (평문 저장) | 상대적으로 높음 |
지속성 | 브라우저 재시작 후 유지 | 탭 종료 시 삭제 |
미래 전망과 개선 방향
보안 강화 동향
브라우저 제조사들은 세션 복구 기능의 보안성을 높이기 위해 다음과 같은 개선 작업을 진행하고 있습니다211:
- 암호화 저장: 세션 데이터의 암호화 저장 방식 도입
- 필드 타입 인식: password 타입 필드 내용의 자동 저장 방지
- 사용자 동의: 민감한 데이터 저장 시 사용자 명시적 동의 요구
AI 기반 보안 기술
일부 브라우저에서는 AI를 활용한 보안 강화 방안을 연구 중입니다:
- 민감한 정보 자동 탐지 및 저장 차단
- 비정상적인 세션 복구 패턴 감지
- 사용자 행동 분석을 통한 위험 평가
결론
브라우저의 세션 복구 기능은 사용자 편의성 향상에 크게 기여하지만, CVE-2022-32969와 같은 심각한 보안 취약점을 내포하고 있습니다211. 특히 민감한 정보가 평문으로 디스크에 저장되는 구조적 문제는 암호화폐 지갑 해킹과 같은 심각한 보안 사고로 이어질 수 있습니다.
사용자는 공용 컴퓨터 사용 시 세션 복구 기능을 비활성화하고, 민감한 작업 시에는 시크릿 모드를 활용해야 합니다14. 개발자들은 password 타입 필드 사용과 적절한 보안 설정을 통해 세션 데이터 노출 위험을 최소화해야 합니다15.
향후 브라우저 제조사들의 보안 강화 노력과 사용자들의 보안 의식 향상이 결합되어야만 세션 복구 기능의 편의성과 보안성을 동시에 확보할 수 있을 것입니다.
- https://support.mozilla.org/ko/kb/restore-previous-session
- https://www.clouddefense.ai/cve/2022/CVE-2022-32969
- https://syedjaferk.hashnode.dev/the-browsers-session-storage
- https://superuser.com/questions/662329/how-do-i-recover-tab-session-information-from-chrome-chromium
- https://www.reddit.com/r/firefox/comments/56sevb/how_to_restore_a_browsing_session_from_backup/
- https://support.mozilla.org/en-US/kb/how-restore-browsing-session-backup
- https://security.stackexchange.com/questions/31937/firefoxs-restore-previous-session-restores-logins-authenticated-by-servers-ses
- https://rgo4.com/tip/91847
- https://truesale.tistory.com/entry/%EA%B5%AC%EA%B8%80%ED%81%AC%EB%A1%AC%ED%83%AD%EB%B3%B5%EA%B5%AC-%ED%81%AC%EB%A1%AC%EC%97%90%EC%84%9C-%EC%82%AC%EB%9D%BC%EC%A7%84-%ED%83%AD%EC%9D%84-%EB%B3%B5%EA%B5%AC%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95
- https://www.mail.com/blog/posts/how-to-restore-tabs/124/
- https://www.bleepingcomputer.com/news/security/metamask-phantom-warn-of-flaw-that-could-steal-your-crypto-wallets/
- https://www.mozilla.org/en-US/security/advisories/mfsa2008-69/
- https://www.cvedetails.com/cve/CVE-2014-1504/
- https://firefoxinside.tistory.com/62
- https://endgrate.com/blog/10-session-management-security-best-practices
- https://studysteadily.tistory.com/53
- https://mint10.tistory.com/entry/%EC%9B%B9-%EB%B8%8C%EB%9D%BC%EC%9A%B0%EC%A0%80-%EC%A0%80%EC%9E%A5%EC%86%8C-%EC%B4%9D%EC%A0%95%EB%A6%AC-%EC%BF%A0%ED%82%A4-%EC%84%B8%EC%85%98%EC%8A%A4%ED%86%A0%EB%A6%AC%EC%A7%80-%EB%A1%9C%EC%BB%AC%EC%8A%A4%ED%86%A0%EB%A6%AC%EC%A7%80%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90
- https://velog.io/@mooh2jj/%EB%B8%8C%EB%9D%BC%EC%9A%B0%EC%A0%80-Session-Storage-Local-Storage-Cookies%EC%84%B8%EC%85%98%EC%BF%A0%ED%82%A4-%EC%98%81%EA%B5%AC%EC%BF%A0%ED%82%A4-%EC%A0%95%EB%A6%AC
- https://learn.microsoft.com/ko-kr/dynamics365/customer-service/administer/enable-session-restore
- https://www.reddit.com/r/firefox/comments/1bc0ceo/is_it_possible_to_restore_session_from_a_few_days/
- https://sunyzero.tistory.com/279
- https://blog.mozilla.org/security/2008/07/30/low-risk-denial-of-service-in-firefox/
- https://docs.oracle.com/en/middleware/idm/access-manager/12.2.1.4/aiaag/mitigating-security-risks-session-cookies.html
- https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage/session
- https://stackoverflow.com/questions/5727863/can-session-storage-be-safe
- https://community.avast.com/t/firefox-sessionstore-js-is-scanned-all-the-time/635883
- https://stackoverflow.com/questions/73795568/how-to-store-sensitive-session-data-in-chrome-web-extension
- https://stackoverflow.com/questions/43208628/where-is-window-sessionstorage-physically-stored
- https://support.mozilla.org/si/questions/1173678
- https://ko.javascript.info/localstorage
- https://dev.to/aneeqakhan/a-developers-guide-to-browser-storage-local-storage-session-storage-and-cookies-4c5f
- https://suzzeong.tistory.com/128
- https://support.mozilla.org/gu-IN/questions/1382274
- https://2minmin2.tistory.com/59
- https://docs.infor.com/csi/9.01.x/en-us/csbiolh/lsm1454147668479.html
- https://exhibitlove.tistory.com/92
- https://blog.naver.com/sgbc2019/221919565922
- https://support.google.com/chrome/thread/256688171/%ED%81%AC%EB%A1%AC-%EB%8B%AB%ED%9E%8C-%EC%B0%BD-%EC%A0%84%EB%B6%80-%EB%B3%B5%EA%B5%AC-%EB%B0%A9%EB%B2%95-%EC%95%8C%EB%A0%A4%EC%A3%BC%EC%84%B8%EC%9A%94
- https://forum.solidproject.org/t/understanding-security-model-session-restore-why-not-store-in-localstorage/4668
- https://forum.solidproject.org/t/understanding-security-model-session-restore-why-not-store-in-localstorage/4668/11
- https://jongminfire.dev/cookie-session-web-storage-local-storage-session-storage
- https://www.reddit.com/r/firefox/comments/a62e35/firefox_eats_all_your_ram_if_you_have/
- https://developer.mozilla.org/en-US/docs/Web/API/Storage_API/Storage_quotas_and_eviction_criteria
- https://ryuhojin.tistory.com/10
- https://velog.io/@yonghyeun/%EB%B8%8C%EB%9D%BC%EC%9A%B0%EC%A0%80-%EC%84%B8%EC%85%98-%EC%8A%A4%ED%86%A0%EB%A6%AC%EC%A7%80%EC%99%80-%EB%A1%9C%EC%BB%AC-%EC%8A%A4%ED%86%A0%EB%A6%AC%EC%A7%80%EC%97%90-%EB%8C%80%ED%95%98%EC%97%AC
- https://dream-and-develop.tistory.com/196
- https://support.google.com/chrome/thread/333349183/restoring-all-tabs-from-a-previous-session
- https://community.brave.com/t/how-do-i-restore-session-not-recently-closed-tabs/465776
답글 남기기