한국어
  • 보안
  • 신원
  • 체크리스트
  • auth

사용자 신원에 대한 필수 보안 체크리스트

사용자 신원을 구축하는 것은 어떤 응용 프로그램의 중요한 구성 요소입니다. 사용자 이름과 비밀번호를 확인하는 것이 가장 단순한 방법처럼 보일 수 있지만, 고려해야 할 많은 다른 측면들이 있습니다.

Gao
Gao
Founder

소개

사용자 신원을 구축하는 것은 어떤 응용 프로그램의 중요한 구성 요소입니다. 이를 통해 개인화된 경험을 제공하고, 데이터 품질을 향상시키고, 사용자 유지를 개선할 수 있습니다.

사용자 이름과 비밀번호를 확인하는 것이 가장 단순한 방법처럼 보일 수 있지만, 고려해야 할 많은 다른 측면들이 있습니다. 시작해 봅시다!

인프라

HTTPS 강제

기본부터 시작합시다. 항상 HTTPS (Hypertext Transfer Protocol Secure)의 사용을 강제하여 인터넷을 통한 데이터 전송을 암호화합니다. HTTPS는 사용자의 장치와 귀하의 서버 간에 교환되는 데이터가 기밀성을 유지하고 변조되지 않게합니다.

HTTPS 설정이 어렵게 보일 수도 있지만, 당신을 도울 수 있는 많은 도구와 서비스들이 있습니다:

  • 자체 호스팅을 하고 있다면, Let's Encrypt는 웹사이트에서 HTTPS를 활성화 할 수 있는 무료 SSL/TLS 인증서를 제공합니다.
  • AWS, Azure, Google Cloud와 같은 클라우드 공급자를 사용하고 있다면, HTTPS를 설정하기 위해 그들의 관리 서비스를 사용할 수 있습니다.

공개 데이터베이스 접근을 허용하지 마세요, 신뢰할 수 있는 소스만 제한

이것 또한 기본적으로 보일 지 모르지만, 공개 접근을 데이터베이스에 허용함으로써 발생한 수많은 보안 위반 사례들이 있었으므로 여기서 언급할 가치가 있습니다.

항상 데이터베이스에 대한 공개 접근을 허용하지 않는다는 것을 기억하세요. 데이터베이스를 사적 네트워크에 두고 신뢰할 수 있는 소스에서만 접근을 허용하세요.

개인 토큰을 안전하게 관리하세요

개인 토큰, 예를 들어 접근 토큰이나 API 키,는 프로그래밍적인 인증과 인가를 위해 자주 사용됩니다. 이러한 토큰을 안전하게 관리하려면:

  • 불법 접근의 위험을 최소화하기 위해 단기 토큰과 새로 고침 토큰을 사용하세요.
  • 키 보관용과 같은 안전한 토큰 저장 메카니즘을 사용하여 토큰이 부정접근으로부터 보호되도록하세요.
  • 토큰을 정기적으로 교체하여 위협에 노출되지 않도록 방지하세요. 일부 프로토콜, 예를 들어 OAuth 2.0,은 토큰 회전을 위한 메커니즘을 제공합니다.
  • 보안 위반 사항 발생시 토큰 취소에 대한 통제를 유지하세요.

비밀번호 해시 알고리즘을 현명하게 선택하세요

비밀번호 해싱에 대한 경험이 있다면, MD5, SHA-1, SHA-2와 같이 더 이상 안전하다고 여겨지지 않는 많은 알고리즘들이 있다는 것을 알 수 있습니다.

그들의 불안정성에 대한 몇가지 일반적인 이유들은:

  • 그들은 비밀번호 해싱을 위해 특별히 설계되지 않았고, 그들의 계산 속도가 너무 빠르기 때문에 강제 공격을 더 쉽게 만듭니다.
  • 그들은 소금의 사용이 부족하며, 이로 인해 그들에 대한 무지개 테이블을 만들기가 더 쉬워집니다.
  • 그들은 충돌 공격에 취약하여 공격자가 동일한 해시 값을 가진 다른 비밀번호를 생성하는 것을 허용합니다.

bcryptArgon2와 같은 업계 표준 비밀번호 해싱 알고리즘은 이러한 문제들을 해결하기 위해 설계되었습니다. 이 기사의 범위가 제한적이기 때문에, 우리는 그들에 대해 자세히 다루지 않겠습니다. 더 알아보기 위해서는 비밀번호 해싱의 진화를 참조하세요.

오픈 표준을 배우고 엄격하게 준수하세요

OAuth 2.0OpenID Connect (OIDC)와 같은 오픈 표준은 사용자 인증 및 인가를 위한 안전하고 표준화된 접근 방법을 제공합니다. 이것들은 업계에서 잘 시험되고 널리 채택되었습니다.

하지만 그들을 잘못 구현하면, 경험이 많은 개발자들이 있는 큰 팀조차도 보안 취약점이 발생할 수 있습니다. 최근의 예로는 Expo에서 발견된 OAuth 취약점이 있습니다, 이것은 모바일 앱을 만들기 위한 인기 있는 프레임워크입니다. 이것은 작은 실수가 보안 위반으로 이어질 수 있다는 좋은 예입니다.

휴면 데이터 암호화

저장된 사용자 정보나 데이터베이스 백업과 같은 휴면 데이터는 강력한 암호화 알고리즘을 사용하여 암호화해야 합니다. 이렇게하면 데이터가 탈취되어도 복호화 키 없이는 읽을 수 없게 됩니다. 클라우드 공급자가 이 기능을 지원하는지 확인하세요, 이것은 일반적으로 준수를 위해 필요합니다.

방화벽 설정

DDoS 공격(분산 서비스 거부 공격)은 고대의 것이지만 여전히 중요한 위협입니다. 2022 Q4를 위한 Cloudflare DDoS 위협 보고서에 따르면, HTTP DDoS 공격 트래픽은 YoY로 79% 증가했습니다. 귀하의 솔루션을 만들려고 시도하기 보다는, 관리 방화벽을 설정하고 알림기를 사용하여 이 위협을 완화하는 것이 좋습니다.

앱 및 클라이언트

공개 클라이언트의 보안 수준 향상

모바일 앱이나 단일 페이지 응용 프로그램과 같은 공개 클라이언트는 보안 취약성에 더 쉽게 노출되어 있습니다. 만약 당신이 그들을 제공하더라도, 당신은 당신의 보안 모델에서 그들을 불신하는 소스로 취급해야 합니다. 예를 들면:

공개 입력 데이터를 절대 믿지 마세요

사용자 입력은 보안 취약성의 중요한 원인이 될 수 있으며, 이는 종종 무시됩니다. 무시되는 일반적인 유형의 취약성은 Cross-Site Scripting (XSS)과 SQL Injection입니다. 이를 사용하기 전에 모든 사용자 입력 데이터를 검증하고 정제하세요.

활동 추적 유지

사용자 활동의 감사 추적을 유지하면 보안 사고를 탐지하고 조사하는 데 도움이 됩니다. 로그인 시도, 비밀번호 변경, 민감한 작업 등의 사용자 행동을 로그 및 모니터링하세요. 이러한 로그를 분석하면 잠재적인 보안 위반 또는 의심스러운 행동에 대한 귀중한 통찰력을 제공할 수 있습니다.

견고한 인증 구현

사용자의 신원을 확인하기 위한 강력한 인증 메커니즘을 구현하세요. 앞서 언급했듯이, 인증을 위해 OAuth 2.0 또는 OpenID Connect와 같은 안전한 프로토콜을 사용하는 것을 고려하세요. 더 많은 정보는 CIAM 101: 인증, 신원, SSO를 참조하세요.

견고한 인가 구현 (예: 역할 기반 접근 제어 구현)

인증 외에도 적절한 인가 메커니즘을 구현해야 합니다. 사용자가 인증을 받은 리소스와 작업에만 접근할 수 있도록 역할 기반 접근 제어 (RBAC)를 구현하세요. 더 많은 정보는 CIAM 102: 인가 및 역할 기반 접근 제어를 참조하세요.

다단계 인증 (MFA) 구현

다단계 인증 (MFA)는 사용자가 비밀번호 및 모바일 장치로 전송된 일회용 코드와 같은 하나 또는 여러 형태의 신원을 제공하도록 함으로써 보안을 추가하는 레이어를 추가합니다. MFA의 또 다른 좋은 예는 저장소를 삭제하는 민감한 작업을 수행할 때 GitHub이 사용자에게 웹페이지에 표시되는 모바일 앱에서 일회용 코드를 입력하도록 요청하는 것입니다.

그러나, 대부분의 초기 스타트업들은 플러그 앤 플레이 솔루션이 없는 한 MFA를 가지고 있지 않다는 것이 중요합니다. 이것은 과도하게 생각할 수 있으며 사용자 경험에 부정적인 영향을 미칠 수 있습니다.

문화

위에서 제공된 조언은 대부분 "수동" 보안 조치를 다루며, 이는 보안 사고가 발생하기 전에 알려진 것입니다. 그러나, 장기적으로 더 효과적인 "활성" 보안 조치를 취하여 전반적인 보안 자세를 개선할 수 있습니다.

피싱 및 사회 공학에 대해 팀과 사용자를 교육하세요

피싱 공격과 사회 공학은 위에서 언급한 많은 보안 조치들을 무용지물로 만들 수 있기 때문에 중요합니다. 예를 들어, 사용자가 비밀번호를 넘기거나 집고양이 그림을 클릭하는 것처럼 보이는 것에 속아 넘어가 질병이 포함된 집고양이 사진을 클릭하면, 비밀번호 해싱 알고리즘이나 방화벽 규칙의 강도는 관계가 없습니다.

대부분의 사람들은 보안 교육이 지루하다고 생각하며, 그것은 종종 그렇습니다. 따라서 팀과 사용자를 교육하는 방법을 변경하십시오. 예를 들어, 실제 공격자가 하기 전에 피싱 이메일을 시뮬레이션하고 어떻게 식별하는지를 보여줄 수 있습니다. 이메일을 보안 팀에 보고하는 것에 대한 보상을 제공할 수도 있습니다.

DevSecOps 설정

수동 보안 리뷰 외에도 DevSecOps 관행을 구현하여 보안 검사를 자동화할 수 있습니다. 예를 들면, CodeQL 과 같은 정적 코드 분석 도구를 실행하는 CI/CD 파이프라인을 설치하고, OWASP ZAP 과 같은 도구를 사용하여 자동 투과 테스트를 실행할 수 있습니다.

사용자 경험에 영향을 미치지 않는 가장 엄격한 구성을 수용하세요

보안에 관해서는 항상, 사용자 경험에 부정적인 영향을 미치지 않는 가장 안전한 구성을 선택하세요. 편의를 위해 보안을 타협하거나 지름길을 사용해야하는 것을 피하세요. 보안은 항상 최우선 과제이어야 합니다.

스타트업이나 인디 개발자로서, 당신은 이러한 조치를 구현하는데 필요한 자원이 부족할 것이라고 느낄 수 있습니다. 그럼에도 불구하고, 무료 또는 스타트업 친화적인 옵션을 제공하는 전문 보안 서비스들이 있습니다. 그들을 검토하고 활용을 고려하는 시간을 가져보세요.

결론

보안은 복잡한 주제이며, 단일 기사에서 모든 것을 다룰 수는 없습니다. 이 기사가 당신이나 당신의 팀에 대해 더 강력한 보안 감각을 구축하는 데 도움이 되었기를 바랍니다. 새로운 앱을 구축하고 있다면, 당신의 제품의 사용자 신원을 최소한의 노력으로 개발하고, 관리하고, 보호하는 데 도움이 되는 플랫폼인 Logto를 확인하십시오.