본문 바로가기

IT/Backend , 네트워크

보안에 대한 생각

여기에 애매한 보안 요구사항이 있다.

 

특정 형태의 클라이언트 기기.

그리고 이와 통신할 클라우드 서버.

이에 자체적으로 적용할 보안에 대해서 생각하다가 이리저리 생각이 많아진다.

 

보안의 중요성은 끝이 없고..

이 세상에 안 뚫리는 시스템은 없다

많이들 들어 봄 직한 얘기들으로, 이 세상에 안 뚫리는 시스템은 없다라는 전제하에, 다만 주어진 예산안에서 효율적으로, 덜 위험하게 ? 타협을 해야 하는 것으로 결론을 내린다.

 

어디에 어떻게 보안을 적용할 것인가 하는 것은, 달리 생각해보면, 해당 시스템에 대해 주인의식이 좀 필요한 것 같다.

남들의 눈을 속이는 요식 행위가 아닌,

내 집에 도둑이 들었을 때를 가정해서 어떤 문을 달지, 도어록은 몇 개를 추가할지, 유료 방범 서비스를 가입할지에 대해서 말이다.

 

특히 고객이나 자사 시스템에 대해서 누군가 나에게 명확한 가이드를 주지 않은 상태에서

어떤 솔루션을 이용하는게 좋을지, 보안으로 인해 성능에는 문제가 없는지, 실무에서 불편한 부분은 어떻게 해결할지 고민이 많이 되는데,

보안을 적용할 대상 및 시나리오, 데이터 성격이 천차만별이므로, 서비스의 특성, 이해 당사자 관계 까지 고려해야 하는 것 같다.

만에 하나 문제가 생기더라도 면피 할 수 있는 근거도 마련해야 할 것 같은 생각이 든다.

이 와중에 클라우드 환경, IoT 환경 등 접점이 늘어남에 따라, 노출되는 양상에 따라 보안이 필요한 곳은 다양해져가고 있고

새로운 보안 기술 소식도 눈에 띈다.

하나 하나 찾아보다보면 여러 개념들로 머리가 지끈해져 오는 걸 발견할 수 있는데,

먼저 우리에게 필요한 것이 뭔지 부터 정의하면 좀 낫지 않을까 생각한다. 

기본적으로 역시 제일 많이 겪는 시나리오는 클라이언트 - 서버간에 일어나는 일들일 것이다.

 

  • 통신 채널을 보호한다.
  • 클라이언트 액세스를 인증한다.

 

이렇게 먼저 우선적으로 필요한 부분에 대해 카테고리를 나눠서 차근 차근 봐야할 것 같다.

 

 

통신채널 보호의 경우,

하위 레이어에서의 일이라서 어렵긴 하지만 그나마 표준화 된 국룰(?) 이 있는 것 같다.

대학 시절 수업으로 들은 내용에서 크게 달라진 내용은 없어보이지만 볼 때마다 잘 이해가 안간다는게 흠이다.

 

암호 구간을 얘기하자면 전송계층에서의 양 끝 사이, 네트워크 상에서 전송 과정 중 내 소중한 데이터가 (패킷) 암호화 되어지는 것이다.  

많이 봤던 SSL/TLS 가 바로 이것이다.

SSL, TLS 둘의 관계에서 지난한 역사를 들춰보는 것은 약간 진부한 과정이다.

그럼에도 이해하려면 세 줄 요약 정도 가지고는 안되고 동화 한편은 읽는다고 생각하고 성급하지 않게 접근해야 한다.

 

  • 통신채널 보호는 SSL ( Secure Scokets Layer) TLS (Transport Layer Security) 쓰면 된다. (..라고 편하게 마음 정리)
  • 1990년대 이후 계속해서 발전해오는 과정에 있으며 인터넷 트래픽 암호화의 표준이다.
  • SSL 핸드셰이크를 통해서 세션 키에 대해 동의하게 되는 과정을 거친다.
  • 암호화 방법으로는 비대칭 키/ 대칭키를 이용한 벙법이 있는데 비대칭키는 리소스를 많이 필요로 하므로 TLS 는 커뮤니케이션 세션 시작에서만 비대칭을 쓴다. (..그렇다고 한다. 이 부분이 어떻게 보면 현실 세계에서 널리 사용되도록 최적화되어가는 과정인 것 )
  • 비대칭키에서 쓰이는 퍼블릭 키는 말그대로 남 줘도 되는 키이고 이걸 가지고 남이 내게 보낼 내용을 암호화해서 주면 내가 프라이빗키 가지고 복호화를 해서 볼 수 있다.
  • SSL/TLS handshake 프로세스는 백그라운드에서 일어나는 일이기 때문에 쓰는 입장에서는 키를 만들고 이를 쓰는 방법이 중요한 것 같다.
  • handshake 는 대~략 아래 내용이다.
  1.  클라이언트 -> 서버 보안 연결. 어떤 암호 모음(cipher suites)를 쓸지 교환
  2.  서버 -> 클라이언트에 인증서 제공 (서버의 퍼블릭 암호화 키 포함) 하고 클라이언트는 진위 확인
  3.  나머지 세션에서 커뮤니케이션 할 기술을 정함 

출처 : commons.wikimedia.org

 

 

인증 (Authentication) 은,

발신자의 신원을 확인하고 접근 가능한 권한이 있는지를 보는 것이다.

여기에도 다양한 매커니즘이 존재하므로 어떤 것들이 있는지는 살펴보아야 한다.

베이직 인증, OAuth 2.0, JWT 등이 있고, 어떤 것이 적합한지는 상황에 따라 다르고 구현의 방법도 다양한 것 같다.

 

 

 

 

 

 

블로그 내용에 대한 의견은 언제든 환영입니다.

 

디테일은 차후 계속,, 

 

 

 

 

 

 

 

 

'IT > Backend , 네트워크' 카테고리의 다른 글

[aws] networking #3  (0) 2023.04.03
[aws] networking #2  (0) 2023.03.31
[aws] networking #1  (0) 2023.03.25
[GCP] firewall 설정을 해도 인스턴스에 반영이 되지 않는 경우  (0) 2021.10.02
카프카를 쓰는 이유  (0) 2021.09.05