미경험 신인 취약성 진단사가 배우는 SQL 인젝션

처음으로, 올해부터 미경험으로 취약성 진단의 공부를 시작한 yukimalo9라고 합니다.

Qiita 첫 투고입니다!
ROM전에서 신세를 낸 이미지밖에 없는 Qiita입니다만 인연 있어 이번 투고하는 운반이 되었습니다.

첫 번째 소재로 다루는 것은 취약성 중에서도 큰 이름이 될 것입니다 ...

SQL 주입



SQL 인젝션이란,
원래 데이터베이스에 액세스할 수 없는 사용자가,
사이트 측의 예상하지 못한 SQL 문을 사용하여 무단 액세스를 할 수있는 무서운 취약점입니다 ...

수많은 취약성 중에서도 꽤 대표적인 것으로,
그 교묘함에서 신인 연수로 SQL 문을 조금만 만져 버린 나는

『진짜냐! 그런 일이! ? 』

라고 생각했습니다 ... 웃음

그러면 실제로 어떤 것인지, 그리고 어떻게 대책해야 하는지, 잡으면서 써 드리겠습니다.

…전에 일단 주의사항을.

그 근처의 웹 페이지 등에 SQL 인젝션을 작동시키는 명령은 절대로 입력하지 마십시오!



당연하지만 데이터베이스에 대한 무단 액세스이므로 ...!

그럼...

예를 들어 특정 입력 양식이 있다고 가정합니다.
사용자는 이 양식에 문자열을 입력하고 해당 정보를 제출하여 데이터베이스에 액세스한다고 가정합니다.
여기에 입력되는 문자열은 데이터베이스에 문의하는 SQL 문에서
'입력되는 문자열'
로 삽입됩니다.

그럼 좀 더 구체적으로 해보자.
어떤 웹 사이트에서 로그인하고 싶을 때, 데이터베이스 (이번에는 MySQL이라고 함)에 문의하는 SQL 문은 다음과 같습니다.



…이 싱글 쿼테이션 마크(‘)와 SQL문 특유의 문법이나 문자로부터 무리 야리 코지 열 수 있는 입력 문자열이 이하의 붉은 싱글 쿼트로 둘러싸인 문자열입니다.



이것으로
id가 1 or 1이 1
의 때, 즉 절대로 조건문은 양이 되어 버립니다.

한편 MySQL에서는 하이픈 2개(— ) 이후는 코멘트 아웃이 되어, 그 직전에는 종단 문자(;)도 있기 때문에,
의미가 있는 SQL문은 전반부분만이 됩니다.

id와 password라는 열의 모든 레코드가 반환되어 로그인 인증으로 지워집니다.

잘 보면 확실히 ...! 라는 감상이 됩니다.
꽤 재미 있습니다!

덧붙여서 개발측으로부터의 견해는 거의 경험이 없기 때문에, 대부분은 말할 수 없습니다만,
SQL 인젝션의 대책으로 들 수 있는 것은

· 이스케이프 처리
· WAF 도입

주님이 될 것입니까?

이스케이프 처리는 가장 물리적으로 효과를 발휘하는 것으로,
SQL 문에서 의미가있는 싱글 따옴표 (‘)와 세미콜론 (;) 등
일반 문자로 인식하도록 설정하는 것입니다.

대조적으로 WAF (와프)는 Web Application Firewall의 약칭으로,
SQL 인젝션이나 XSS(크로스 사이트 스크립팅) 등의 취약성에 대한 대책이며,
웹 애플리케이션에 액세스하기 전에 악성 액세스를 종료합니다.

이러한 부정한 접근으로 인한 사건은 결코 없어서는 안됩니다.
제공 측은 반드시 그 케어를 해 두어야 하는 것도 말할 필요도 없습니다.
저도 욕심을 배우고 싶습니다.

이번 첫 투고라는 것으로, 꽤 졸린 문장으로 죄송합니다만,
지적 개소등 있으면 꼭 지도해 주셨으면 합니다.
잘 부탁드립니다.

좋은 웹페이지 즐겨찾기