Re : 처음부터 시작하는 크래킹 생활 ~ SQL 인젝션 편 ~

「SQL 인젝션이란」으로부터 들어가, 「개수·대책」까지 시스템 담당자는 「정리」필독



공격 사이트에 크래킹 해 가자.

과거작은 이쪽
· OWASP ZAP를 이용한 취약성 진단 입문 ~환경 구축편~

집필에 있어서, 이하의 서적을 참고로 하고 있습니다.

체계적으로 배우기 안전한 웹 애플리케이션을 만드는 방법 제2판 ​​취약성이 생기는 원리와 대책의 실천 목적 SQL 인젝션에 대해서, 이론만으로는 한계가 있기 때문에, 실제로 크래킹함으로써 근본적으로 배운다. SQL 인젝션이란? SQL 인젝션의 "SQL"은 데이터베이스를 조작하는 대표적인 "데이터베이스 언어"입니다. 또 SQL 인젝션의 「인젝션」이란, 영어로 「주입」을 의미합니다. 부정한 「SQL」의 명령을 공격 대상의 웹 사이트에 「주입한다(인젝션한다)」가, SQL 인젝션입니다. SQL을 호출하는 방법에 결함이 있는 경우 발생합니다. 예를 들어, 보안 조치가 충분하지 않은 사이트에 모든 키워드로 검색할 수 있는 검색 양식이 있다고 가정합니다. 공격자가 그 폼에 악의 있는 SQL문을 입력하는 것으로, 그 SQL문의 내용이 실행되어 버립니다. 이로 인해 데이터가 빼앗겨 버리거나 웹 사이트가 변조되어 버리거나 인증을 피할 수 있습니다. 예상되는 피해 SQL 인젝션 공격에 의한 주된 피해로서 개인정보의 유출과 변조, 인증의 회피를 들 수 있습니다. 이하, 각각의 피해 내용에 대해 간단히 해설합니다. ① 개인정보 유출 웹사이트가 이용하는 데이터베이스에는 그 웹사이트를 이용하는 사용자의 ID, 패스워드, 비밀번호를 비롯한 개인정보가 포함되어 있습니다. 공격자가 웹사이트에 대해 SQL 인젝션 공격을 하게 함으로써, 부정한 SQL 명령이 실행되어 버려, 그들 개인정보가 모두 빼앗겨 버릴 가능성이 있는 것입니다. 예를 들어 취약성이 있는 웹사이트의 웹 양식에 "데이터베이스에 등록되어 있는 회원 정보 모두 표시해 주세요"라는 내용의 SQL의 명령을 입력한다고 합니다. 대책이 제대로 되어 있지 않으면, 그 명령이 그대로 실행되어 버려, 회원 정보가 모두 빼앗겨 버린다는 것입니다. 실제 피해 과거에는 다양한 피해가있었습니다. ・「PlayStation Network」에 대한 SQL 인젝션 공격에 의해, 약 7,700만 인분의 개인정보의 유출 ・주식회사 낚시 비전의 Web 사이트에 대한 SQL 인젝션 공격에 의해, 63,656명의 개인 정보의 유출 최근에는 인재파견회사인 아스카가 SQL 인젝션에 의해 3만건의 개인정보를 유출시켰다. ②웹사이트의 변조 또한 SQL 인젝션 공격으로 대상 웹사이트를 변조할 수도 있습니다. 게다가 변조된 사이트에 액세스 하면 바이러스 감염될 수 있습니다. ③인증 회피 로그인 화면에 SQL 인젝션의 취약성이 있을 때, 인증을 회피되어 패스워드를 몰라도 로그인할 수 있습니다. 실제로 공격해 본다 이번에는 이 사이트를 사용하여 공격을 합니다. 메모리 누수, 교착 상태, 리디렉션 루프, JVM 충돌... 버그 투성이 웹 애플리케이션을 사용하여 버그 이해

개인정보 유출




이러한 검색 화면에 SQL 인젝션을 실시한다.
이번은 비밀번호 검색이지만, 로그인 화면 등, 어느 어플리케이션이라도 하는 기능이, SQL 인젝션의 대상이다.

준비가 되면 실제로 공격



일반적으로 데이터베이스로부터 정보를 취득할 때, 다음과 같은 SQL문이 사용된다.

SELECT * FROM ユーザマスタ WHERE ユーザID = '{$userId}' AND パスワード = '{$password}'

여기에서
パスワード = '{$password}'
에 주목해 주었으면 한다.
방금 전의 비밀번호 검색 화면에서 입력한 값이 팔럼으로서 {$password}에 들어온다.

예를 들어 비밀번호 필드에 "Poku Pit"을 입력하면 위의 SQL 문에
パスワード = 'ぽーくぴっつ'
라고 들어, 유저 중에서 「뽀쿠 피트」인 사람을 조회하는 구조다.
유저 마스터로부터, 패스워드가 뽀쿠 피트인 사람을 조회하는 구조다.

여기서, 악의있는 ​​사용자가 사용자 마스터로부터 모든 비밀번호를 취득하고자 할 때 입력하는 파라미터는 다음과 같다.
'OR'1'='1
이것을 입력하면, 위의 뽀쿠핏이 바뀔 뿐이므로,
パスワード = ''OR'1'='1'
된다.
1=1의 것을 취득한다 = 모두 취득할 수 있다는 것이다.
이를 수행하여 얻은 결과는 다음과 같습니다.


보시다시피, 모든 비밀번호가 목록으로 획득됩니다.

개수·대책



그렇다면 SQL 주입 공격으로 인한 피해를 예방하기 위해 어떤 조치를 취해야 합니까? 참고로 하고 있는 도쿠마루 히로시씨 : 체계적으로 배운다 안전한 Web 어플리케이션의 만드는 방법 제2판[고정판] 취약성이 생기는 원리와 대책의 실천 에 따르면, 확실한 대책으로서는 1개만으로, 플레이스홀더를 이용해 SQL을 호출하는 것입니다.

정적 자리 표시자로 SQL 문 조립

静的プレースホルダは、実行前にSQL 文の構文解析などの準備をしておく方式である。セキュリティの観点で、最も安全であり、SQL インジェクションの脆弱性は生じない。

pypy.java
PreparedStatement prep = conn.prepareStatement("SELECT * FROM users WHERE name=?");
prep.setString(1, "samuragouchi");

ここで、パラメータ部分を示す記号?のことをプレースホルダと呼び、そこへ実際の値を割り当てる。

pypy.java
prep.setString(1, userId);

ここで与えている数字は、何番目のプレースホルダであるか、です。
なので先ほどの名前とパスワードを入力する例としては、

pypy.java
PreparedStatement prep = conn.prepareStatement("SELECT * FROM users WHERE ユーザID=? AND パスワード=?");
prep.setString(1, userId);
prep.setString(2, password);

となります。

추가로해야 할 조치

ここまでで説明したように、SQLインジェクションに対する根本的対策はプレースホルダを利用することでしたが、ここでは、プレースホルダの利用に加えて実施すると良い追加策をいくつか紹介します。

취약성 진단 서비스로 확인

脆弱性診断サービスとは、攻撃者の立場にたってさまざまな疑似攻撃を行ってセキュリティのリスクがないか洗い出すサービスです。脆弱性診断サービスでは、今回紹介したSQLインジェクションをはじめとして、システムが幅広い攻撃を受ける危険性がないか調査します。

脆弱性診断サービスには無料・有料いずれも数多くの種類があります。そのうちの1つ「OWASP ZAP」は、よく知られる無料のウェブアプリケーション用脆弱性診断サービスで、今回紹介したSQLインジェクションやクロスサイトスクリプティングといったウェブサイトに対する代表的な攻撃に対する脆弱性の診断を行うことができます。

ただ、あくまでOWASP ZAPはSQLインジェクションやクロスサイトスクリプティングにしか使えないと思っておいた方がいいので、対顧客向けサービスは必ず、プロに任せましょう。
ちなみにWebアプリケーション診断は診断会社によって違いますが、プラットフォーム診断はほぼどこも変わりません(ツールで診断するためです)。
選ぶべきポイントは、診断観点です。まずは自社のセキュリティ規定をみましょう。そしてそれを充足している診断観点で診断してくれるベンダーを探しましょう。まあこの会社なら大丈夫でしょうではなく、セキュリティ担当者が診断観点を理解した上でベンダーを選定することが重要です。

기타 대책 방법

代表的な対策方法を紹介しましたが、さらに安全性を高めるために、以下にあげるような対策も有効です。
・データベースのアカウント権限を最小限にとどめる
・エラーメッセージをそのまま表示させないようにする
データベースのアカウント権限を最小限にとどめることで、仮に攻撃者に不正なSQL文を送信されても、その被害をおさえることができます。またシステムがだしたエラーメッセージをそのまま表示すると、攻撃者に対してシステムに関するヒントを与えてしまうことになるので注意して下さい。

위험 감소, 위험 보유 변명

ありません

요약

ぶっちゃげSQLインジェクションは超有名な攻撃です。筆者も入社後の研修でプレースホルダを用いたエスケープ処理を実装しました。そのくらい新入社員だろうと知っておくべき知識なのです。サイバー攻撃が巧妙化する中で、こんな超有名な攻撃への対策を知らなかったでは済まされません。システム所管部の皆様、あえて厳しいことを言うと、所管しているシステムからSQLインジェクションの脆弱性が発見された時点で恥ずべきことと心得てください。

改修コストが〜とか対費用効果が〜とか利用者が限定されているため〜とかつらつら言い訳を述べてくる担当者もいますが、IPAやその他国際団体が定める「リスク高」の脆弱性を改修しない言い訳は存在しないと考えといてください。

長くなりましたが、SQLインジェクションは超基礎だよ〜ってことです。
次回も超基礎の攻撃のどれかについてまとめます。

참고

시스템에 종사하는 모든 사람들은 이것을 살펴야합니다. 필자는 책과 Kindle 버전 모두 가지고 있습니다. ·

좋은 웹페이지 즐겨찾기