다섯번째 생각해볼 문제에 대한 제 생각입니다. 피드백 가능할까요?

21.08.08 00:43 작성 조회수 333

0

벌써 제로님 강의의 수강률이 70%가 넘어가고있네요.

정말 재밌게 보고있습니다. 코드를 clone해오는 것은 실력이 안쌓인다 생각하여 깃허브에 코드를 직접 타이핑하면서 문제가 생기면 디버깅을 하면서 보고있다보니 진도가 느린 감도 없지 않아 있는거같네요.

그렇지만, 이번에도 코드를 직접 따라치고 디버깅을 하면서 전체적인 맥락을 계속 짚을 수가 있게 된거같습니다 :)

각설하고 제가 이번에 생각해볼 문제에 대한 생각은 다음과 같습니다.


1. 인증 정보는 세션에 저장됩니다. 하지만 세션을 사용할 수 없는 REST 같은 환경일 경우 인증정보를 획득할 수 있는 방법을 생각해보세요.

JWT와 같은 서비스를 통해 토큰을 활용하여 인증정보를 획득할 수 있을 것 같습니다.

음 여기서 JWT에 대한 질문을 올려도 되는지 모르겠지만 KeyCloak 이나 Vault와 같은 걸로 토큰을 중앙 제어하는 것이 안전하다 들었습니다. 특히, 키클록은 인증/인가에 대한 많은 서비스를 제공해서 편리하다고 알고 있었는데

Access Token을 DB에 저장하는 것은 위험한지가 궁금하더라구요.

제가 현재 하는 사이드 프로젝트는 KeyCloak 도입은 아직 하지말자하고 테스트는 DB에서 진행 중인데 DB에 하면 위험한 행위일지? (액세스토큰 탈취 위험이 있기에..) 하지만 키클록이나 볼트도 동일하다고 생각하고 있기도 합니다.

그렇다면 DB에 안전하게 액세스토큰을 저장하는 방법이 있을까요? 일단 만료시간을 최대한 짧게 해두고 리프레시토큰을 통해서 하고 있는데 이정도까지만해도 안전한지 궁금합니다.

또한, 토큰을 사용할 경우 Http header에 담는게 좋을지 아니면 POST request의 경우 Body에 담는 케이스도 경우도 있는데

https://datatracker.ietf.org/doc/html/rfc6750#section-2

여길 보니 둘 다 해당 내용에 맞춰서 하면 별 문제 없는지도 궁금해졌습니다.

2. 인증과 접근제어를 통해 기밀성과 무결성을 보호하기 위한 벨 라파둘라와 비바 규칙을 알아 보세요.

1. 벨 라파둘라 모델

 -  기밀 정보에 대한 데미터 기밀성 및 통제된 액세스에 초점을 맞춘 모델로, 서브젝트와 오브젝트로 구분된다.

이 모델은 State-Machine의 개념을 기반으로 만들어졌으며, 컴퓨터 시스템에서 허용 가능한 상태 세트를 가지며 한 상태에서 다른 상태로 전환은 전환 기능에 의해서 정의된다.

이 모델은 두 개의 MAC 규칙을 정의한다.

  • Simple Security Property : 더 높은 보안 수준의 개체를 읽을 수 없다. (No Read-Up)
  • Star Secuirty Property : 낮은 보안 수준의 개체에 쓸 수 없다. (No Write-Down)

만약, 기밀, 비밀, 공개로 세 상태를 분류한다면 다음과 같다.

비밀 취급자는 자신의 상태보다 높은 기밀 파일과 자신의 상태와 동급인 비밀 파일을 만들 수 있으나, 공개 파일을 만들 수는 없으며, 비밀과 공개파일은 읽을 수 있으나 기밀 파일을 읽을 수는 없다.

한계점으로는 무결성을 파괴할 수 있다는 점이다.

(낮은 레벨의 인가자가 상위 레벨의 문서를 변경가능하기 때문에)

2. 비바 모델

- 데이터의 무결성을 보장하기 위해 설계된 접근 제어 규칙을 작성하는 모델

델 라파둘라 모델("read down, write up")과 대조적으로 "read up, write down" 형식이며, 자신의 상태 이하의 파일을 만들 수 있으며, 자신의 상태 이상의 파일을 읽을 수 있다.


따라서, 벨 라파둘라 모델과 다른 아래와 같은 규칙을 갖는다.

  • Simple Security Property : 더 낮은 보안 수준의 개체를 읽을 수 없다. (No Read-Down)
  • Star Secuirty Property : 높은 보안 수준의 개체에 쓸 수 없다. (No Write-Up)

이  두 모델은 처음 알게된 모델인데 벨 라파둘라 모델의 무결성 문제 때문에 비바모델이 나온 것으로 학습하였는데 사실 비바모델도 자기보다 높은 수준의 파일을 읽다보니 이것도 보안의 문제가 되지않나 궁금해지더라구요.

제로님의 생각은 어떠신지 궁금합니다!

3. 웹 브라우져에서 사용하는 쿠키는 WAS 에 유용한 정보를 제공합니다. 만약 쿠키가 3자에 노출되었을때 발생하는 문제점을 생각해보세요.

만약, 인증쪽에 쿠키를 사용하게 된다면 쿠키 스니핑과 같은 공격에 취약해질 수 있습니다.

이 쿠키정보를 토대로 로그인을 시도할 수 있는 문제도 발생한다고 생각합니다.

더 나아가 개인정보 침해의 문제가 있는데 사용자 이메일이나 브라우저 고유값 등과 같은 값이 포함되는 문제일 경우 이 사용자가 어떤 사이트를 접속했는지 그리고 접속한 사이트를 추정하여 연령대 및 성별 식별까지 가능하다고 생각합니다.

따라서, 개인정보보호를 위해서는 쿠키에 저장될 값은 최소화해야하며 개인정보나 그런 값들이 존재할 경우에는 난독화 혹은 https를 통해 모든 통신이 암호화되게끔 해야될 것 같습니다.

답변 2

·

답변을 작성해보세요.

1

답변이 늦어 죄송합니다.

느린 진도는 많은 생각을 하신다는 증거고 
이를 통해 개발자의 지식이 깊어지는 과정이라 생각합니다.

차근차근 제 강의를 들어주셔서 감사합니다.

1. 인증 정보는 세션에 저장됩니다. 하지만 세션을 사용할 수 없는 REST 같은 환경일 경우 인증정보를 획득할 수 있는 방법을 생각해보세요.

잘 이야기 해주셨습니다.

토큰의 메커니즘을 구현한 JWT 와 
커버로스 메커니즘을 따르는 KeyCloak, Vault 기술은

WAS 의 세션을 사용할 수 없는 상황에서
대안으로 사용할 수 있는 쉽고 훌륭한 기술입니다.

하지만 반드시 
인증과 접근제어에 사용되는 토큰을 보호해야 한다는 조건이 필요합니다.

따라서 물어보신 "Access Token" 안전하게 사용하기 위해선

1) "Access Token" 를 보관하는 클라이언트 관점에선
트러스트존같은 HW 적으로 보호되는 영역에 저장해야 하고

2) "Access Token" 을 인증하는 서버 관점에선
SHA256 이상의 강인성을 가지는 해쉬함수에 솔트(레인보우테이블방어)사용
DB 에 저장해 "Access Token" 이 유출 되더라도 사용할 수 없도록 방어하면 됩니다.

3) 물론 "Access Token" 을 주고받는 네트워크는 HTTPS 프로토콜을 사용해야 하구요.

추가로 물어보신 HTTP HEADER 와 POST 중 어느 부분에 토큰을 담으면 좋을지에 대한 제 의견은

HTTPS 가 사용된다는 가정에서 차이가 없지만

토큰은 인증을 위해 개발자가 만든 코드에서 처리되는 데이터이기 때문에

POST 영역에 보내고 requeset 객체를 통해 꺼내와 사용하는 것이
개발의 코드구현이 쉬워질것 같습니다.

2. 인증과 접근제어를 통해 기밀성과 무결성을 보호하기 위한 벨 라파둘라와 비바 규칙을 알아 보세요.

잘 이야기 하셨습니다.

벨라파둘라 와 비바 모델은 안전한 시스템을 만들기 위해 적용하고 지키면 되는 지식입니다.

대부분 접근제어 정책은 잘 설계되고 이를 통해 기밀성은 잘 유지시킵니다.

게시판을 예로 들면 
내가 쓴 글만 지울 수 있게 하거나
남이 쓴 글을 수정할 수 없게 하는 기능들이 
벨 라파둘라를 잘 지킨 경우입니다.

그런데 의외로 무결성을 유지시키기 위한 비바모델이 붕괴(무력화) 되는 경우가 많습니다.

대표적인 공격이 첨부파일을 통한 웹쇌(jsp, sh 파일을 올리고 url 로 실행) 공격입니다.

사용자는 jsp 를 올리면 안되는데
(높은 보안 수준의 개체에 쓸 수 없다.)
jsp 을 올려 높은 보안 수준의 개체를 쓰고 
실행할 수 있음이 문제가 되는 거죠.

따라서 인증과 접근제어만으로는 안전한 시스템이 될 수 없고

항상 옆의 개발자와 내가 만든 코드가 안전한지 함께 검토하는 동적검증
안전한 개발 패턴을 기계로 검토하는 정적검증 2가지를 실행해야 합니다.

이부분을 이야기 드리고 싶어서 질문하였습니다.

3. 웹 브라우져에서 사용하는 쿠키는 WAS 에 유용한 정보를 제공합니다. 만약 쿠키가 3자에 노출되었을때 발생하는 문제점을 생각해보세요.

잘 이야기 해주셨습니다.

추가로 쿠키 스니핑을 할 수 있는

대표적인 공격은 XSS 이고 
XSS 공격을 방어할 수 있는 기능은 프레임워크에서 기본적으로 제공합니다.

의외로 프로젝트 종료 시점에 XSS 방어 기능이 동작하지 않는걸 발견합니다.
따라서 초기 구현 시점부터 XSS 방어 기능을 고려해서 개발해야 합니다.

(우리가 만드는 프레임워크의 XSS 방어는 개정판에 설명됩니다.)

0

와 벨라파둘라와 비바모델 이해가 안갔었는데 답변을 보니 이해가 잘 가네요 ㅎㅎ 
상세한 답변 매우 감사드립니다!!