Authentication Bypass

DATE : 2023/11/24

앞에서 살펴본 SQL Injection은 인증 우회를 위한 방법 중 한 가지이다.

뜬금없이 인증과 SQL Injection..?! 정리가 잘 되지 않는다.. 😞

Authentication과 SQL injection의 연관성을 살펴보기 전에

"Authentication을 우회한다"는 게 어떤 느낌인지 먼저 알아보자!

What is Authentication Bypass?

Bypass라는 단어는 우회, 우회하다 라는 뜻으로

원래는 거쳐야 하는 과정을 거치지 않고 피해간다는 의미이다.


어떤 건물에 들어가려면 출입증이 필요하다고 한다.

출입증은 없지만 건물에 들어가고 싶은 hanhxx가 건물 밖을 서성이다가 한 가지 방법을 떠올렸다.

건물에 들어가기 위해 출입증을 스캔하고 나면, 문이 열렸다 닫히기 까지 총 10초가 걸리는 것이었다.. 🙀

우연치 않게 달리기가 빠른 hanhxx는 문이 닫히기 전에 아슬아슬하게 뛰어 들어가기로 했다.

운 좋게 경비원이 자리를 비운 사이, 문이 열렸고 hanhxx는 이 기회를 놓치지 않고 건물로 들어갔다.

~ a few minutes later ~

중요한 서류를 훔쳐 다시 건물 밖으로 나오자 hanhxx는 자신이 했던 거처럼 빠르게 건물로

뛰어 들어가는 yunsoo를 보았다.

그렇다.. 안으로 들어갈 때 뿐만 아니라 밖으로 나갈 때도 문은 동일하게 10초 동안 열리는 것이다.. 😂

hanhxx는 왠지 모르게 진 기분을 느끼며 집으로 돌아갔다고 한다.


이 스토리에서 등장한 hanhxx와 yunsoo는 모두 출입증이 없음에도 불구하고 건물에 들어갈 수 있었다.

출입 권한이 있는 사람에게만 출입증이 주어지고, 출입증으로 문을 여는 것이 정해진 절차이다.

하지만 의도한 바와 달리 출입 권한이 없는 사람이 이를 피해서 문을 통과할 수 있었다.

이처럼 권한이 없는 사람이 인증 절차를 거치지 않고(피해서) 인증에 성공하는 것,

이를 인증 우회 Authentication Bypass라고 한다.

Authentication & SQL Injection

자, 그럼 인증 우회와 SQL Injection이 어떻게 연결될 수 있는지 살펴보도록 하자.

로그인 과정에 빗대어 얘기해보자면 로그인은

사용자가 입력한 계정 정보를 가지고 식별과 인증을 통해 수행된다.

만약 서버에서

SELECT * FROM member WHERE username='___' AND password='___'

위와 같은 SQL을 실행한다고 가정해보자.

원래는 사용자가 username:password를 입력하고 그 값을 가져와

SELECT * FROM member WHERE username='hanhxx' AND password='hanhxx1234'

위와 같은 SQL을 실행해 결과가 존재하면 로그인 성공, 존재하지 않으면 로그인에 실패할 것이다.

이때 만약 비밀번호를 모르는 사람이 hanhxx 계정으로 로그인하고 싶어 한다면 어떻게 해야 할까??

이 사람이 서버에서 실행되는 SQL이 위와 같음을 추측했다면

SELECT * FROM member WHERE username='hanhxx' # AND password='idk'

Result > SELECT * FROM member WHERE username='hanhxx'

이와 같이 username 조건 이후의 SQL을 주석 처리 해버릴 수 있을 것이다.

이 말은 비밀번호를 모르는, 즉 해당 계정의 권한이 없는 사람이 서버 측에 작성된 SQL에

다른 SQL을 주입함으로써 자신이 원하는 계정으로 로그인 되도록 인증 과정을 우회할 수 있다는 것이다.

따라서 로그인과 같이 DB 정보를 기반으로 인증을 하는 경우에는

SQL Injection이 인증 우회를 위한 한 가지 수단이 될 수 있다는 결론에 다다르게 된다!!

Last updated