본문으로 건너뛰기

보안

이 안내서는 당신, 당신의 앱, 그리고 당신의 고객까지 안전하게 만드는 Tauri 디자인의 중심에서 고수준 개념과 보안 기능을 설명합니다.

Note

우리는 당신의 애플리케이션을 강화할 수 있도록 모든 기회를 활용하지만, BIOS 공격, 메모리 로우해머링, 기타 운영 체제 취약성과 같은 근본적인 위협이 항상 존재하며 지속적으로 발견되고 (가장 좋은 경우) 책임감 있게 공개됩니다.

또한, 개발 팀이 편법을 쓰거나, 민감한 정보를 누출시키거나, 다양한 공격을 받을 수 있도록 문을 활짝 열어둘 수 있는 방법이 많이 있습니다. 보안은 끝없는 탐구이며, 사용자들은 계속 안전하기를 바랍니다.

따라서, 최종 사용자의 어느정도 척박한 플랫폼에서 실행되는 맥락에서 애플리케이션이 수행하는 모든 작업의 보안 결과를 고려하는 데 시간을 할애할 것을 적극 권장합니다.

만약, 도움이 필요하거나 검토가 필요하면 Tauri 팀에 보안 상담을 요청하는 것을 환영합니다.

보안 연구자들

Tauri에 보안 문제나 어떠한 이슈가 있다고 생각되면 찾은 문제에 대해 공개적으로 언급하지 마십시오. 대신에, 저희 보안 팀에 직접 연락해 주십시오: security@tauri.app

비록, 현재는 보안 관련 보상금에 대한 예산은 없지만, 경우에 따라 제한된 자원 내에서 책임 있는 공개에 대한 보상을 고려할 것입니다.

서버 불필요

Tauri를 사용하면 백엔드와 통신하기 위해 별도의 서버를 사용할 필요 없이 사용자 인터페이스에 웹 기술을 사용하는 애플리케이션을 구축할 수 있습니다. 백엔드로 오프로드 작업을 하거나, 동적 임포트와 같은 고급 기술을 사용하더라도 TCP 포트나 외부 프로세스에 트래픽을 스니핑할 수 없습니다. 그 이유는 여기엔 아무것도 없기 때문입니다. 이러한 축소는 당신의 최종 바이너리에 물리적, 가상 공간에 좋을 뿐만 아니라, 잠재적인 공격 매개체의 범위도 줄어들게 합니다.

Rust 언어 기능들

메모리 안전성과 속도로 유명한 프로그래밍 언어로 전환함으로써 Tauri는 모든 종류의 기존 공격을 간단하게 없앨 수 있습니다. "해제 후 사용"같은 건 Tauri에서 일어나지 않습니다.

동적 선행 시간 컴파일(AOT)

이 컴파일 프로세스는 Tauri 앱의 부트스트랩 단계에서 여러 번 발생하게 됩니다. 우리의 기본 동적 선행 시간 컴파일러를 사용하게 되면, 모든 세션에 대해 고유하고 여전히 기술적으로 정적 코드 단위인 코드 참조를 생성할 수 있습니다.

함수의 강화

기능적 ASLR

기능적 주소 공간 레이아웃 무작위화(Functional address Space Layout Randomization) 기술은 런타임에 함수 이름을 무작위로 지정하고 OTP 해싱을 구현할 수 있으므로, 두 세션이 매번 동일하지 않습니다. 우리는 부팅 시간이나 선택적으로 매번 실행 후에 새로운 유형의 함수 이름으로 명명할 것을 제안합니다. 각각 함수 포인터에 UID를 사용하면 정적 공격을 방지할 수 있습니다.

Kamikaze 함수 주입

EVENT API 끝점에서 사용하는 이 고급 유형의 fASLR은 Rust가 런타임에 WebView에 삽입하는 클로저(무작위 핸들 포함) 로 프로미스(promise) 를 래핑한 것으로 인터페이스는 이 프로미스와 함께 잠기게 되고, 매번 실행 시 null로 처리됩니다.

Bridge, 제공하지 않음

잠재적으로 안전하지 않은 기능을 전달하는 대신, 이벤트 브리지를 사용하여 애플리케이션의 각 부분에 있는 브로커라고 명명된 명령과 메시지를 전달할 수 있습니다.

일회성 패드 토큰화 및 해싱

OTP 소금(salt)를 이용하여 중요한 메시지를 해싱하면 사용자 인터페이스와 Rust 백엔드 간의 메시지를 암호화할 수 있습니다. 우리는 현재 놀라운 Infinite Noise TRNG를 통해서 불확실한 추가 소스들을 조사 중입니다.

시스템 특징

허용하는 API

UI 혹은 Rust로 사용할 수 있는 API 함수를 고르고 선택할 수 있습니다. API 함수들이 활성화되지 않으면 해당 코드가 앱과 함께 제공되지 않으므로 바이너리 크기와 공격 받을 표면적이 줄어들게 됩니다. 이것들은 선택사항이므로 애플리케이션을 점진적으로 향상시키려면 의식적으로 선택해야 합니다.

콘텐츠 보안 정책(CSP) 관리

웹사이트에 대한 무단 코드 실행을 방지하는 것은 오랫동안 CSP를 사용하여 "해결"되어 왔습니다. Tauri는 CSP를 사용자 인터페이스의 index.html에 삽입할 수 있으며, localhost 서버를 사용할 때 이 헤더를 UI 또는 연결된 다른 클라이언트에도 보냅니다.

어려운 디컴파일

이는 Electron ASAR 파일처럼 앱을 쉽게 디컴파일할 수 없으므로 당신의 프로젝트를 리버스 엔지니어링하는 프로세스가 훨씬 더 시간 집약적이게 되며 전문가 교육이 필요로 하게됨을 의미합니다.

생태계

파이프라인과 아티팩트 신뢰성 구축

소스 코드 아티팩트를 릴리스하는 프로세스는 고도로 자동화되어 있지만, 실제 사람이 시작하고 검토해야 합니다. 현재 우리의 릴리스 전략은 Github Actions와 IOTA Tangle 게시를 조합해 사용하고 있습니다.

탄력적인 PR 및 승인 프로세스

우리 WG-TECH는 코드 변경 사항을 검토하고 범위에 따라 PR에 태그를 지정하며 모든 것이 최신 상태로 유지되도록 하고 있습니다. 그리고, 새로운 버전을 게시하게 되면 유지보수 관리자 중 한 명이 dev 태그에 새 릴리스를 지정하게 됩니다.

  • 코어 검증
  • 스모크 테스트 진행
  • Crates 및 npm 보안 감사
  • 변경로그 생성
  • 아티팩트 생성
  • IOTA의 체크섬 게시
  • 릴리스 초안 생성

그리고, 유지보수 관리자는 릴리스 정보를 검토하고 필요한 경우 편집하여 새 릴리스로 배포하게 됩니다.

향후 작업

서명된 바이너리

전체 프로젝트가 하나로 된 바이너리로 제공되기 때문에 모든 배포 가능한 항목에 대해 코드서명을 할 수 있습니다. (현재는 외부 도구를 사용하고 있지만, 우리는 번들러를 원스톱으로 만들기 위해 적극적으로 노력하고 있습니다.) 이는 사실상 해커로 하여금 설치된 응용 프로그램을 운영체제의 알림 없이 바꾸는 것을 불가능하게 만들어 줍니다. 참조

바이너리 이후 분석

산업 수준 침투 테스터 도구(곧 출시될 Tauri-Frida GUI를 통해) 를 통해 최종 바이너리에서 보안 취약점을 발견하고 수정하는 데에 사용하세요.

바이너리 이후 향상

아직 제공 되지 않았지만, 빌드 이후 항목은 Tauri가 이전에 본 적 없었던 도구를 제공할 것입니다. 계속 주목해 주세요.

감사

우리는 현재 첫 번째 외부 감사를 진행 중입니다. 완료되면 여기에 그 결과를 공표하겠습니다.