Short session expiration does not help security

웹 애플리케이션에 로그인하면 세션이 영원히 유효한 상태로 유지되지 않습니다. 일반적으로 세션은 로그인 후 일정 시간이 지나거나 사용자가 일정 시간 동안 유휴 상태가 되면 만료됩니다. 이 시간은 얼마나 길어야 하나요?

소개

장미는 빨간색입니다. 제비꽃은 파란색입니다. 세션이 만료됩니다. 당신을 괴롭히기 위해

일부 웹 애플리케이션에서는 세션이 만료됩니다. 잠시 후 로그아웃되고 다시 이늦ㅇ해야 합니다. 현재 보안 권장 사항은 15분 동안 활동이 없는 경우와 같이 매우 짧은 시간 제한을 사용하는 것입니다. 그러나 대부분의 모바일 앱과 Gmail또는 Github와 같은 대형 웹 애플리케이션은 이를 준수하지 않습니다. 다시 인증하지 않아도 영원히 로그인할 수 있는 것처럼 보입니다. 안전하지 않나요? 구글과 마이크로소프트가 NIST와 OWASP보다 더 잘 알고 있을까요?

위협 모델

위협 모델은 공격자가 사용자의 활성 세션에 무단으로 액세스하는 것을 포함합니다. 이는 세션 쿠키를 훔치거나 세션 고정 취약점을 악용하거나 피해자와 동일한 디바이스를 사용하는 등 다양한 방법을 통해 발생할 수 있습니다.

하지만 15분 동안 활동이 없을때 세션을 만료하면 세션 탈취를 방지할 수 있을까요?

XSS

공격자가 XSS 또는 세션 고정을 통해 세션 쿠키를 훔치면 공격자는 즉시 유효한 세션에 액세스할 수 있으며 세션을 유지하기 위한 요청을 계속 수행할 수 있습니다. 절대 시간 제한을 설정하면 공격자가 사용할 수 있는 시간이 제한되지만, 현실적으로 이는 공격자에게 큰 방해가 되지 않습니다. 정의상 공격자는 유효한 세션 토큰을 훔쳐서 즉시 사용할 수 있기 때문입니다. 아마도 공격자는 즉시 자신을 관리자로 만들거나 사용자의 모든 비트코인을 자신의 계정으로 송금할 것입니다. 이 공격은 표적 공격이므로 공격자는 애플리케이션의 세션 시간 제한을 알고 있으며 세션 시간 제한이 초과되기 전에 공격을 자동화할 수 있습니다.

로그된 토큰

공격자가 로그 또는 컴퓨터를 훔친 후 하드 드라이브에서 오래된 세션 토큰을 본다면, 세션 타임아웃이 아마도 세션탈취를 방지했을 것입니다. 이것은 세션 타임아웃을 위한 논리일 수 있지만, 짧은 세션 타임아웃을 위한 것은 아닙니다. 또한, 로그를 보호하거나 하드 드라이브 암호화를 사용하여 이를 방지하는 것이 좋습니다.