web-dev-qa-db-ja.com

localhostからのMySQL接続を制限してセキュリティを向上させる

localhostのみをリッスンしている場合でも、MySQLユーザー名とパスワードを知っている人なら誰でもアクセスできると聞きました。

私の情報は次のとおりだと仮定します:

USER: root
PASS: 123456
Host: LOCALHOST (only)

そこにいる(ローカルの)誰でもアクセスできるのはどうしてですか?

24
Darkeden

リモートホストからユーザー名とパスワードへのアクセスを制限すると、誰かがデータベースに外部からアクセスできなくなります。

また、ローカルホストマシンから3306(MySQLデフォルトポート)へのトラフィックのみを許可するようにファイアウォールを構成することもできます。

更新

LOCALHOSTを介してのみアクセスできるようにユーザーを設定するには、次を使用します。

GRANT ALL PRIVILEGES ON *.* TO db_user @'localhost' IDENTIFIED BY 'db_passwd';
GRANT ALL PRIVILEGES ON *.* TO db_user @'127.0.0.1' IDENTIFIED BY 'db_passwd';

また、MySQLサーバーをローカルアドレスにバインドします。これを行うには、[mysqld]セクションのmy.cnf

[mysqld]
bind-address = 127.0.0.1
45
ajtrichards

これは私が偶然見つけた古い質問ですが、DarkedenがphpMyAdminなどを実行していた場合、有効なMySQL資格情報を使用して誰でもログインできます。

侵害された場合は、接続を制限することに加えて、すべてのパスワードを変更します。

5
Steve

ファイアウォールまたはMySQL自体でMySQLへの直接アクセスをブロックできますが、ハッキングされる可能性が最も高いのは、安全でないWebアプリケーションを使用することです。その場合、攻撃者はデータベースログインを読み取って接続できます。サーバー。

アプリケーションを安全に保ちましょう-すべてを最新の状態に保ち、ファイルのアップロードを許可せず、複数のアカウントがある場合はsuPHPを使用します。

Mysqlアプリケーションを制限する場合は、次の手順を実行します。

1.ポート3306をブロックするだけです。サイトが同じサーバー上にある場合は、localhostをホスト名として使用してデータベースにアクセスできます。

2.「bind-address = 127.0.0.1」をmy.cnfファイルの「[mysqld]」セクションに追加して、localhostへのアクセスのみを制限します。

ほとんどの人がこのタイプの制限を使用しています。

4
Ami

私は彼の(調整された)質問に答える答えを見ませんでした-彼はそれをローカルホストにロックし、攻撃者はまだ入っています。

ローカルホストに本当に制限している場合(netstat -an | egrep 3306を使用して、0.0.0.0ではなく127.0.0.1をリッスンしていることを確認してください) 、thenそれにアクセスする唯一の方法は、そのローカルホストから接続を開始することです。

実行する最初の手順:

  1. おそらく交換用システムを最初から再構築し、一般にアクセス可能にする前に強化してください(たとえば、ansibleを使用して反復可能なレシピを用意すると、彼がどのように侵入するかを学習するために何度か繰り返す必要があります)。明らかな穴は、
  2. セキュリティの専門家からの助けを得る(あなたが修正するために$または時間とフラストレーションを費やすかどうかに依存する)
  3. セキュリティパッチを適用し、
  4. 不要なサービスを削除し、
  5. データベースへのアクセスを、それを必要とするプログラムのみに制限します。
  6. すべてのパスワードをやり直し、
  7. インストールされているルートキット、およびその他のウイルスを確認します。
  8. 自分のオフィスでサーバーを保護し、スタッフがソーシャルエンジニアリングの処理を訓練している場合、
  9. 通過するリクエストを監視およびフィルタリングし、直接アクセスを拒否するサービスを使用します(例:クラウドフレアをチープ開始点として使用)
  10. サーバーへのアクセスに使用されるすべてのマシンでキーボードロガー(物理およびソフトウェア、その他のウイルス)を確認します)、
  11. サーバーにアクセスする際のキーストロークを記録する物理的な手段(たとえば、ATMで使用されるWebカムスタイル)を確認し、よりエキゾチックなインクルードサウンド( https://en.wikipedia.org/wiki/Acoustic_cryptanalysis )近くのWiFiアクセスポイントで入力する(例 https://www.schneier.com/blog/archives/2016/08/keystroke_recog.html
  12. 監査証跡を追加し、データベースアクティビティを監視して、彼がどのように通過しているかを調べますが、少なくともセキュリティホールから別のセキュリティホールにホップするだけなので、少なくともすべての明らかなセキュリティ保護を最初に行う必要があります

彼は次のものを使用することもできます。

  1. 外部からアクセス可能で、既存のデータベース接続を介して任意のsqlコマンドを実行できるセキュリティホールがある、実行中のプログラム(Webサーバーなど)を介してアクセスします。 https://www.w3schools.comを参照してください。 /sql/sql_injection.asp

  2. 彼がlocalhost:3306への接続をプロキシするために彼が外部からアクセスできるプログラムをだまします(たとえば、マシン上で誤って設定されたネットワークファイアウォールを介して)

  3. ローカルプログラム(bash。mysqlなど)を実行するためにいくつかのプログラムをtrickし、そこからデータベースにアクセスする-バッファオーバーフローやその他の特別に細工されたデータは、任意のコードを実行する際の一般的な問題です

  4. 正当なアクセス権を持つ接続に対する中間者攻撃

  5. 外部からのデータを自動または手動で処理するプログラムのバグ、たとえば、電子メール、スクリプト処理によるpostscript/pdf/anyドキュメントの処理-テキストファイルを表示することさえ危険です- https://www.proteansec .com/linux/blast-past-executing-code-terminal-emulators-via-escape-sequences /

  6. ソーシャルエンジニアリングにより、人々にアクセスしてもらう方法

  7. アクセスできるコンピューターに接続されたハードウェアデバイスの取得(作業駐車場にある「メモリースティック」を拾い、代わりに「プログラム可能なキーボード」をチェックアウトし、すべてのコンピューターがキーボードを信頼します!)

  8. そして、私が知らない他のすべての種類のメソッドがありますが、関与しているものは共有しています...

実用的なセキュリティが必要であることを忘れないでください、xkcdはそれをちょうどいいと言っていると思います: https://xkcd.com/538/

2
iheggie