출처: Two simple rules for better and more secure code
안녕하세요!
이전 게시물 중 하나인 "최고의 애플리케이션 보안 도구는 교육입니다"에서 특히 예산이 제한되어 있는 경우 보안에 대해 자신이나 엔지니어를 교육하는 것이 가장 높은 투자 수익을 얻을 수 있는 이유에 대해 설명한 바 있습니다. 하지만 보안을 배우거나 가르치는 것이 말처럼 간단하지 않다는 것을 잘 알고 있습니다. 조직마다 고유한 특성이 있고 엔지니어마다 고유한 자질이 있기 때문입니다. 게다가 보안 코딩 관행을 내재화하는 것은 시간이 많이 걸리는 과정입니다. 이제 막 이 여정을 시작하는 분들을 위해 기억하기 쉽고 자신이나 동료가 작성하는 코드의 보안을 크게 강화할 수 있는 매우 간단한 두 가지 규칙을 공유하고자 합니다. 그럼 시작해 보겠습니다!
모르는 것은 기록하지 마세요.
간단한 애플리케이션을 개발 중이라면 다양한 정보를 로깅하고 있을 가능성이 높습니다. 로그는 소프트웨어를 이해하는 데 필수적이며 디버깅 중에 없어서는 안 될 필수 요소입니다. 실제로 더 많은 애플리케이션 및 운영 정보를 기록할수록 애플리케이션에서 발생할 수 있는 문제를 디버깅할 수 있는 준비가 더 잘 되어 있습니다.
하지만 명심해야 할 규칙은 다음과 같습니다. 로깅을 고려할 때마다 다음 두 가지 중요한 질문을 스스로에게 해보세요:
- 로깅하는 데이터에 민감한 정보가 포함되어 있나요? 예를 들어 자격 증명, 요청 또는 응답 헤더 또는 클라이언트 IP나 사용자 이름과 같이 잠재적으로 사용자를 식별할 수 있는 정보가 포함되어 있나요? 간단히 말해, 개인 식별 정보(PII)의 범주에 속하는 모든 것이 포함됩니다.
- 복잡한 데이터 구조를 기록하는 경우 기록될 모든 필드를 완전히 이해하고 신뢰하나요?
이러한 질문은 사용자가 생성한 데이터나 완전히 제어할 수 없는 외부 서비스에서 생성된 데이터를 다룰 때 특히 중요합니다. 이 질문이 중요한 이유는 기록하는 데이터가 결국 Elasticsearch에 저장되거나, 클라우드에 백업되거나, 알 수 없는 기간 동안 로컬에 저장되는 등 다른 곳에 저장될 수 있기 때문입니다. 이러한 보조 위치는 처음 로그를 캡처한 환경보다 보안이 취약한 경우가 드물지 않습니다. 이로 인해 로그가 기록된 지 몇 달이 지난 후에도 로그를 볼 수 없는 개인이 로그에 액세스할 수 있는 위험이 크게 증가합니다. 이는 유출 및 해킹의 가능성은 말할 것도 없고 잠재적인 문제가 될 수 있습니다.
로그를 통해 민감한 정보가 유출되는 것도 문제지만, OWASP의 로그 주입 문서에서 설명한 것처럼 잘못 처리된 로그도 무기화될 수 있다는 점을 명심하세요.
요약하자면, 무턱대고 모든 것을 기록하는 것은 피하고 안전하고 진정으로 필요한 것을 기준으로 신중하게 선택하시기 바랍니다.
원시 오류 노출 방지
엔지니어가 성공적인 응답을 신중하게 작성하고, 반환할 필요한 데이터만 선택하고, 신뢰할 수 없는 데이터를 현명하게 살균하는 경우를 생각보다 훨씬 더 자주 보게 됩니다. 그러나 동시에 코드가 생성하고 던지는 오류는 완전히 무시합니다.
API의 사용자나 소비자에게 반환되는 오류에는 성공적인 응답에 비해 더 많지는 않더라도 민감한 데이터가 포함될 수 있습니다. 스택 추적, 파일 시스템 경로, 자격 증명이 포함된 URL, 내부 주소, 비밀이 포함된 환경 변수 등은 이러한 오류에 포함될 수 있는 몇 가지 예에 불과하며, 실수로 소프트웨어에서 유출될 수 있습니다.
내부적으로 오류를 처리하기 위해 노력하고 필요한 경우 관련 오류 세부 정보를 기록하는 것은 간단합니다. 하지만 사용자나 API 소비자에게 표시되어야 하는 오류의 경우에는 안전하고 실행 가능한 사용자 지정 오류 메시지를 작성하세요.
참고: 앞서 설명한 두 가지 규칙은 간단하고 당연해 보이지만, 얼마나 자주 무시되어 조직에 수천 또는 수만 달러의 수정 및 관련 비용이 발생할 수 있는 심각한 보안 사고로 이어지는지 알면 놀랄 것입니다. 사전 경고는 사전 예방입니다!
시간을 내어 읽어주셔서 감사드리며 오늘의 포스팅을 마치겠습니다!
'Translate' 카테고리의 다른 글
[번역] 리액트(React) 디자인 패턴 (0) | 2023.11.14 |
---|---|
[번역] 모바일 우선 웹 디자인이 데스크톱에 미치는 부정적인 영향 (0) | 2023.11.11 |
[번역] 상위 10가지 소프트웨어 개발 KPI (0) | 2023.11.08 |
[번역] JSON은 느립니다. JSON 보다 더 빠른 4가지 대안 (1) | 2023.11.04 |
[번역] 지루한 개발자를 위한 10가지 재미있는 웹 개발 프로젝트 아이디어 (2) | 2023.10.28 |