본문 바로가기

보안지식

[노말틱 취업반 2주차 정리] 로그인 인증

한 번 로그인 인증 과정을 자세하게 뜯어보겠습니다.

.

.

우선 옛날에 어떡해 통신 했는지 간단하게 봐봅시다.

완전 간단했다고 합니다! 그저 클라이언트가 서버에게 나 user이야! 보내면 끝입니다.

 

 

참 단순하죠

 

그런데 이러다가 문제점이 발견됩니다.

다른 클라이언트가 거짓말을 해서 데이터를 보냈더니

그 거짓말을 믿고 서버는 곧이 곧대로 그 데이터를 줬습니다!

 

 

그러면 안 되는데 말이죠

 

이러면 B클라이언트는 손 쉽게 A의 정보를 가져올 수 있었습니다.

그래서 한가지 생각 해낸게 있습니다

바로 클라이언트가 보낸 정보를 서버가 이름 붙여서 저장하는 것입니다

 

예를 들어 서버에서는 클라이언트A의 식별자인 userID를 ClientA라고 합시다. 그럼

 

 

클라이언트:  나 userID가 ClientA야!

서버는 ClientA라는 정보 받고 바로 Client A 구나 라고 알게 됩니다

마치 포스트잇처럼 데이터에 붙여서 보냅니다.

 

이렇게 단순 정보로 알려주는 것을 저희는 쿠키라고 불립니다!

 

쿠키는 웹 서버에게 보내는 작은 데이터 쪼가리(어느 클라이언트인지 식별용) 입니다.

 

그리고 클라이언트가 어느 쿠키를 보내고 서버가 알아보는 것을 Set-Cookie 이라고합니다.

좋습니다. 그런데 문제점이 있습니다.

 

이 기능 덕분에 따로 인증 없이 쿠키만 보고 그 클라이언트가 식별 가능하게 되었습니다.

그런데!

해커는 쿠키를 그대로 배껴오기 시작합니다.

 

이래서 클라이언트에 오는 정보를 믿으면 안됩니다

 

 

이로 인해 B는 A의 쿠키 덕분에 A의 정보를 쉽게 빼올 수 있게 된거죠.

이를 전문 용어로 쿠키변조 라고 합니다!

 

실제로 옛날엔 쿠키를 그저 loginUser = user1 이렇게 설정 했다고 합니다.

그래서 그때엔 loginUser = user2 만 적고 보내면 user2의 정보를 가져올 수 있었다고 하네요!

 

 

그래서 이를 해결하기 위해 새로운 기능을 만들었습니다.

 

바로 세션(Session)입니다. 제가 로그인 기능 만들면서 쓴 기능입니다!

 

간단하게 봐봅시다. 앞서 말한 문제점의 공통점이 있습니다. 바로 클라이언트에서 오는 정보이라는 것입니다.

쿠키를 정해주고 클라이언트에서 쿠키 바꿔서 보내오고 또 데이터 바꿔서 보내온다는 것입니다

 

 

클라이언트: Mine! Mine! Mine! Maaaaaaaaaaaaaine!     서버: ....

 

그러니 서버는 클라이언트을 안 믿고 이제 자신이 직접 저장하게 됩니다.

서버가 해킹 당하지 않는 이상 변경되지 않게 말이죠

 

 

결국 화난 서버

 

이처럼 서버에서 클라이언트 정보 저장할때 1과 함께 적어 둡니다. 식별 용이죠

그리고 Client A에게 다음부터 너 인증할때 포스트잇으로 1을 붙여 라구요.

그러면 클라이언트는 1과 ClientA를 인증 받게 됩니다. 그러면 서버측은 1이 어느 클라이언트인지 알 수가 있죠!

 

이러면 알 수가 있죠! 어?? 방금 클라이언트에 식별용으로 보내는 것은 쿠키라 부르지 않았나요??

 

맞아요!

저희는 이걸 알면 됩니다. 저기 DB에 어느 세션인지 알아보기 위한 숫자 보이시죠?

 

 

이거요! 숫자란

 

 

우리는 저걸 세션을 구별하기 위한 용도이니 세션ID라고 불립니다.

그리고 서버는 클라이언트에게 세션ID를 알려주고 포스트잇 마냥 클라이언트는 그걸 붙여서 보냅니다.

 

즉! 쿠키는 포스트잇 처럼 데이터에 쪼가리 붙여서 보내는 것이구요

쿠키를 이용해 세션ID를 서버에게 보냅니다!

그리고 서버에서는 세션ID 통해 세션 정보를 찾을 수 있답니다.

 

 

못 그려도.. 봐주세요

 

 

물론 이렇게 간단하게 세션ID를 1,2,3으로 정하면 안됩니다.

그러면 다른 해커가 다른 사암의 세션ID를 유추해서 뺏을 수 있기 때문이죠!

 

이렇게 세션ID를 뺏어서 공격하는 것을 세션 하이제킹 공격이라고 합니다!

 

 

그래서 서버측에서는 세션ID를 매우매우 복잡하고 시간 될때마다 바뀌게 해놔서 대응을 하고 있답니다!!

.

.

.

.

그래서 로그인 인증 과정을 보았습니다!

서버에서 세션을 저장하고

세션ID를 클라이언트에게 알려주고

클라이언트는 세션ID를 쿠키에 담아서 서버에게 알려주는 것이

 

일반적인 로그인 인증 과정입니다!

.

.

.

.

.

.

이렇게 정보 글을 마치겠습니다 감사합니다!