본문으로 건너뛰기

개발 중 보안

좋든 싫든, 오늘날의 앱은 수많은 공격을 받을 수 있고, 또 정기적으로 받는 운영 체제에서 살고 있습니다. 보안에 취약한 앱이 운영 체제를 우회해 들어올 취약점이 될 때, 전문 해커들이 사용하는 도구에 기여하는 셈이 됩니다. 도구가 되어서는 안됩니다.

This is why we have taken every opportunity to help you secure your application, prevent undesired access to system-level interfaces, and manufacture bullet-proof applications. 사용자는 개발자가 모범 사례를 따를 거라 생각합니다. 저희는 모범 사례를 따르기 쉽게 만듭니다, 하지만 아래 내용에 대해 여전히 알아둘 필요가 있습니다.

보안은 커뮤니티의 책임입니다

Tauri 앱의 보안 수준은 Tauri 그 자체와 Rust 의존성, npm 의존성, 작성하신 코드, 그리고 최종 앱을 실행하는 기기의 보안 수준까지 모두 합산한 것임을 기억하셔야 합니다. Tauri 팀은 최선을 다하고, 보안 커뮤니티 역시 제 역할을 하겠지만, 꼭 중요한 모범 사례들을 적용하셔야 합니다.

앱을 최신 상태로 유지해야 합니다

앱을 출시할 때, Tauri를 포함한 번들 역시 보내야 합니다. 따라서, Tauri에 영향을 주는 취약점이 앱 보안에 영향을 줄 수 있습니다. Tauri를 최신 버전으로 업데이트해, 치명적인 취약점이 이미 패치되어 앱을 악용할 수 없도록 해야 합니다. 또, 컴파일러 (rustc)와 트랜스파일러 (nodejs) 역시 종종 해결된 보안 문제들을 내려받아야 하므로 최신 상태를 유지해야 합니다.

의존성을 검토해야 합니다

npm과 Create.io에서는 편리한 패키지를 많이 제공하지만, 신뢰할 수 있는 서드 파티 라이브러리를 고르거나 Rust로 새로 작성하는 것은 귀하의 몫입니다. 만약 알려진 취약점에 영향을 받거나 더이상 관리되지 않는 오래된 라이브러리를 쓰신다면 앱의 보안과 여러분의 수면 시간이 위험에 처할 수 있습니다. npm audit이나 cargo audit 등의 도구를 사용해 검증 과정을 자동화하고 보안 커뮤니티의 중요 업무에 기대어보세요.

더 안전한 코드를 적용해야 합니다

앱의 제1차 방어선은 귀하께서 작성하신 코드입니다. Tauri가 교차 사이트 스크립팅이나 원격 코드 실행 등 일반적인 웹 취약점에서 보호해줄 수 있음에도 부적절한 설정은 보안에 영향을 줄 수 있습니다. 그런 상황이 아니더라도, 보안 소프트웨어 개발 모범 사례 적용 및 보안 테스트를 수행하는 편이 좋습니다. 이 말의 의미는 다음 구획에서 더 자세히 설명하겠습니다.

사용자를 가르쳐야 합니다

True security means that unexpected behaviour cannot happen. So in a sense, being more secure means having the peace of mind of knowing that ONLY those things that you want to happen can happen. 그러나 현실 세계에선,, 이상적인 "꿈"일 뿐입니다. However, by removing as many vectors as possible and building on a solid foundation, your choice of Tauri is a signal to your users that you care about them, their safety, and their devices.

위협 모델

Tauri 앱은 생애 주기의 여러 지점에서 수많은 조각으로 구성됩니다. 여기에 일반적인 위협과 그 대응책을 설명해두었습니다.

업스트림 위협

Tauri is a direct dependency on your project, and we maintain strict authorial control of commits, reviews, pull requests, and releases. 저희는 최신 의존성을 유지하고, 업데이트, 포크 그리고 수정 조치를 취하기 위해 최선을 다합니다. 다른 프로젝트는 잘 관리되지 않을 수 있고, 검사조차 받지 않았을 수 있습니다. Please consider their health when integrating them, otherwise, you may have adopted architectural debt without even knowing it.

개발 위협

개발자라면 개발 환경에 관심을 가질 거라 생각합니다. 운영 체제, 빌드 도구, 그리고 연관 의존성을 최신으로 유지하는 것은 개발자의 몫입니다.

우리 모두가 마주할 진짜 위험은 일반적으로 프로젝트의 직접 의존성을 공격하는 것으로, "공급망 공격"이라고도 알려져 있습니다. However, a growing class of attacks in the wild directly target development machines, and you would be well off to address this head-on.

추천하는 방법 하나는 중요한 의존성을 오직 git에서 해시 리비전으로, 하다못해 차선책으로 태그 이름으로 가져오는 것입니다. Rust 생태계 뿐만 아니라 Node 생태계에서도 마찬가지입니다. 또, 모든 기여자가 커밋을 서명하도록 하고 Git 브랜치와 파이프라인을 보호하시는 것이 좋습니다.

빌드 시간 위협

현대 조직은 바이너리 결과물 생성을 위해 CI/CD를 사용합니다. At Tauri, we even provide a GitHub Workflow for building on multiple platforms. 만약 자체 CI/CD를 만들었고, 서드 파티 도구에 의존한다면 버전을 명시적으로 고정하지 않은 액션이 있는지 살펴보셔야 합니다.

배포할 플랫폼을 위한 바이너리를 서명할 필요가 있고, 그 작업이 복잡하고 설정하는 비용이 클 수 있으나 최종 사용자는 개발자가 앱을 검증했기를 기대합니다.

실행 시간 위협

웹뷰가 안전하지 않다고 가정했기 때문에, Tauri는 신뢰할 수 없는 사용자 콘텐츠를 불러오는 상황에서 웹뷰의 시스템 API 접근에 대한 여러 보호를 구현했습니다.

상세한 내용은 아래에서 읽어보실 수 있습니다. 하지만 CSP를 사용하면 웹뷰가 사용할 수 있는 통신 유형이 잠깁니다. 나아가, 문맥 격리는 신뢰할 수 없는 콘텐츠나 스크립트가 웹뷰 내부에서 API에 접근하는 것을 막습니다.

그리고 부디, 무엇을 하시든 웹뷰에서의 개인 키 암호화 결과를 절대 신뢰하지 마세요. Rust가 존재하는 이유입니다.

업데이트 도구 위협

We have done our best to make shipping hot updates to the app as straightforward and secure as possible. 그러나 매니페스트 서버, 빌드 서버, 혹은 바이너리 호스팅 서비스의 제어 권한을 잃는다면 무의미해집니다. 만약 자체 시스템을 구축한다면, 전문 OPS 아키텍트에게 의견을 묻고 올바르게 구축하세요.

안전한 콘텐츠 불러오기

Tauri는 HTML 페이지에서 콘텐츠 보안 정책 (CSP)을 제한합니다. 로컬 스크립트 이름은 해시되고, 스타일과 외부 스크립트는 암호화 논스로 참조됩니다. 이로써 허가되지 않은 콘텐츠를 불러오지 못하게 막을 수 있습니다.

위험

CDN을 통해 제공되는 스크립트 등 공격 요소로 활용될 여지가 있는 원격 콘텐츠를 불러오는 것을 피하세요. 또, 신뢰 불가능한 파일은 새롭고 파악하기 어려운 공격 요소가 될 수 있습니다.

CSP 보호는 [tauri > security > csp]가 Tauri 설정 파일에서 켜진 경우에만 활성화됩니다. 최대한 제약되어 있게 만드시는 편이 좋습니다. 웹뷰는 신뢰할 수 있는, 그리고 가능하면 직접 소유하고 있는 곳에서만 애셋을 불러올 수 있게 해야 합니다. 컴파일 시간에, Tauri는 논스와 해시 값에 CSP 속성을 자동으로 덧붙입니다. 따라서, 앱의 어떤 점이 특별한지만 고민하시면 됩니다.

script-src, style-src, CSP 출처를 살펴보시면 이 보호 정책에 대해 더 많이 알아보실 수 있습니다.