Kerberos 인증 프로토콜은 입장권이라는 개념을 사용하여 비 암호화 네트워크에서 신원을 증명할 때 사용되는 프로토콜입니다. 신원은 ID나 패스워드 같은 정보가 될 수 있겠습니다. 이름은 그리스신화에서 하데스가 키우는 머리가 세 개 달린 개의 이름에서 따왔다고 합니다. 이 개는 저승으로 가는 문을 지키는 문지기 역활을 하고 있다고 합니다.
Kerberos Protocol은 대칭키 방식으로 작동되고, Trusted-Third-Party가 필요하다고 합니다. TTP는 AS(Authentication Server)가 따로 존재하는 것입니다. 즉 서비스를 제공하는 서버와 인증 서버, 클라이언트까지 세 개로 나누어져 있는 구조를 말합니다. Windows 2012에서는 Kerberos를 사용하기 위해서 AD DS를 구성해야하고, 이 경우 AD가 인증서버 역활을 하게 됩니다.
대칭키 방식은 어떤 암호화 되지 않은 평문을 어떤 키(대칭키)를 이용해서 암호화 알고리즘에 돌리면 암호화가 되고 다시 암호화 할 때 사용했던 키로 복호화를 할 수 있는 방식이라고 보시면됩니다. 즉, 암호화하는 키와 복호화 하는 키가 서로 같다고 해서 대칭키(symmetric key)입니다. 이 방식은 대칭키가 유출되면 키가 하나밖에 없기 때문에 정보가 유출될 위험이 커서 비 대칭키 방식처럼 암호화키와 복호화키가 다른 방식도 존재합니다.
커버로스 프로토콜
서비스를 제공받고 싶은 클라이언트, 서비스를 제공하는 SS서버, 인증을 제공하는 AS서버가 있습니다.
1. 유저는 자신의 장치에서 ID와 비밀번호를 입력하면, 장치는 비밀번호는 특정 알고리즘을 사용하여 암호화하여 저장하고, ID는 AS서버로 보냅니다.
2. AS 서버는 그 ID를 받고 자신의 데이터 베이스에 존재하는 유저인지 확인하고 존재한다면, Client/TGS Session Key(인증 서버와 세션을 성립하기 위한 키)를 생성하고, 그 대칭키를 유저의 패스워드로 암호화해서 메시지A를 만듭니다. 그리고 TGT(Ticket-Granting-Ticket)이란 것을 만들고 현재 시간이라던지 클라이언트의 대한 정보를 넣고, TGS(Ticket-Granting-Services)-Secret Key를 사용해 메시지 B를 만들고, 메시지 A와 B를 클라이언트로 보냅니다.
* TGS는 AS에서 제공하는 티켓 승인 서비스입니다. TGT는 TGS에 티켓 승인 요청을 하기위한 티켓입니다. TGT는 TGS 시크릿 키로 암호화되고, 클라이언트는 TGT의 내용을 볼 수 없습니다. TGS키는 TGS만 알고있기 때문입니다.
3. 클라이언트는 메시지 A와 B를 받고, 아까 유저에게 받았던 패스워드키로 메시지 A를 해독시도합니다. AS서버에 저장되어있는 패스워드와 일치하다면 클라이언트는 Client/TGS Session Key를 획득합니다.
4. 클라이언트는 TGT에 자신의 정보와 원하는 서비스를 합하여 메시지 C를 만들고, 메시지 D는 현재 시간과 클라이언트 ID를 융합하여 Client/TGS Session Key로 암호화합니다. C와 D는 AS에 보내집니다.
5. TGS는 받은 C와 D의 클라이언트 정보를 비교하고 일치한다면 메시지 E와 F를 만듭니다.
메시지 E는 Client to Server Ticket으로 클라이언트가 서버에 서비스를 요청하기 위한 티켓입니다. Server's secret key로 암호화되어 TGS와 SS만 내용을 확인할 수 있는 메시지입니다. 내용은 유효기간이라던지, 티켓 발급시간, 클라이언트 정보가 들어있습니다. 메시지 F는 Client/Server Session key가 들어있습니다. Client/TGS Session key로 암호화 되어있어서 위 과정을 정상적으로 밟은 클라이언트는 문제없이 Client/Server Session key를 획득하여 SS와 세션을 성립할 수 있게 됩니다.
6. Client는 메시지 E와 F를 받습니다. E는 Client to Server Ticket으로 서비스를 요청해야할 때 제시해야 하는 메시지입니다. 메시지 G를 새로 만들어서 자신의 식별정보(Client ID와 현재시간)을 넣고 Client/Server Session key로 암호화합니다.
7. SS는 메시지 E와 G를 받아서 E는 Server's secret key로 복호화하고, G는 Client/Server Session key로 복호화해서 메시지 E의 정보와 G의 정보를 비교하고 매치된다면 승인 메시지 H를 만듭니다.
메시지 H에는 현재시간을 동봉하고 Client는 Client/Server Session key를 통해 메시지 H를 복호화하고 시간을 체크하고 Server를 신뢰합니다. 그리고 SS는 Client에게 요청받은 서비스를 제공합니다.
이런 과정으로 Kerberos 인증 프로토콜은 서버와 클라이언트 모두에게 신뢰를 가져다주는 프로토콜이라고 할 수 있습니다. 하지만 단점도 있는데 유저가 많아지면 모두 각각의 티켓을 발행해야 하므로 과부하가 걸릴 수 있다는 점이고, AS가 다운되면 인증을 받을수가 없어서 서비스를 받지못하게 되는 문제, 시간 설정이 AD와 일치하지 않다면 서비스가 거절되는 증상들이 있습니다. 하지만 AS서버는 여러 대로 하여도 되고, 시간 설정은 동기화하면 되서 그렇게 큰 문제는 아닙니다. 대칭키를 암호화하는 알고리즘 또한 Kerberos 버전이 올라가면서 강한 알고리즘을 채택하여 보안수준이 높습니다. 커버로스는 버전 5까지 나온 것으로 알고 있습니다. 위 내용은 Kerberos 영문 위키에서 대부분 참고한 것으로 아래 주소를 올릴테니 더 자세한 내용은 참고하시면 좋습니다.
'Cybersecurity' 카테고리의 다른 글
내부 전파(Lateral Movement)와 이벤트 로그 1편 (0) | 2019.06.24 |
---|---|
SAML과 OAuth의 차이 (0) | 2019.05.23 |
How to use the NIST SP800 series of standards for ISO 27001 implementation (0) | 2018.11.15 |
NIST SP(Special Publications) 800 Series based on FISMA, FIPS (0) | 2018.11.15 |
가장 안 지켜지는 개인정보 파기, 대표 위반사례 4 (0) | 2018.05.18 |