システムのセキュリティは、1回限りの作業ではありません。むしろ、セキュリティに対する組織のアプローチには多くの層があります。これらのレイヤーの一部は、データセンターへの物理的セキュリティ、インフラストラクチャの定期的なパッチ適用とメンテナンス、継続的なユーザー認識教育、および問題のスキャンシステムです。この記事では、nmap
の使用方法について説明します。 およびnc
適切な次のステップを決定できるように、システムをスキャンするコマンド。ここでの例では、いくつかのシステムを使用しています。スキャンを実行するシステムは、ローカルのRed Hat Enterprise Linux(RHEL)8.3コンピューター、opendemo.usersys.redhat.com
です。 は、いくつかの開いているポートがあり、さまざまなターゲットシステムがあるために使用されているRed HatSatellite6.8システムです。
[次のこともお勧めします:Sysadminセキュリティ:8つのLinuxロックダウンコントロール]
基本スキャン
Satelliteサーバーで使用されているポートを確認するには、サーバーにSSHで接続してから、netstat
を使用します。 :
[root@opendemo ~]# netstat -tlpn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:27017 0.0.0.0:* LISTEN 1443/mongod
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 1197/redis-server 1
tcp 0 0 0.0.0.0:5646 0.0.0.0:* LISTEN 1132/qdrouterd
tcp 0 0 127.0.0.1:8751 0.0.0.0:* LISTEN 1194/python
tcp 0 0 0.0.0.0:5647 0.0.0.0:* LISTEN 1132/qdrouterd
tcp 0 0 127.0.0.1:19090 0.0.0.0:* LISTEN 1237/cockpit-ws
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1175/sshd
tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN 1242/postmaster
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1396/master
tcp 0 0 0.0.0.0:9090 0.0.0.0:* LISTEN 1138/ruby
tcp 0 0 127.0.0.1:45285 0.0.0.0:* LISTEN 28650/Passenger Rack
tcp 0 0 127.0.0.1:5671 0.0.0.0:* LISTEN 1140/qpidd
tcp 0 0 0.0.0.0:8008 0.0.0.0:* LISTEN 1240/ruby
tcp 0 0 127.0.0.1:5672 0.0.0.0:* LISTEN 1140/qpidd
tcp6 0 0 :::8140 :::* LISTEN 2101/java
tcp6 0 0 127.0.0.1:61613 :::* LISTEN 1135/java
tcp6 0 0 :::5646 :::* LISTEN 1132/qdrouterd
tcp6 0 0 :::5647 :::* LISTEN 1132/qdrouterd
tcp6 0 0 :::80 :::* LISTEN 1131/httpd
tcp6 0 0 :::22 :::* LISTEN 1175/sshd
tcp6 0 0 ::1:5432 :::* LISTEN 1242/postmaster
tcp6 0 0 :::3128 :::* LISTEN 1258/(squid-1)
tcp6 0 0 ::1:25 :::* LISTEN 1396/master
tcp6 0 0 127.0.0.1:8443 :::* LISTEN 1135/java
tcp6 0 0 :::443 :::* LISTEN 1131/httpd
tcp6 0 0 :::9090 :::* LISTEN 1138/ruby
tcp6 0 0 127.0.0.1:8005 :::* LISTEN 1135/java
tcp6 0 0 ::1:5671 :::* LISTEN 1140/qpidd
tcp6 0 0 :::8008 :::* LISTEN 1240/ruby
tcp6 0 0 ::1:5672 :::* LISTEN 1140/qpidd
tcp6 0 0 :::5000 :::* LISTEN 1131/httpd
[root@opendemo ~]#
ただし、それらの一部はローカルホスト、127.0.0.1に制限されています。どのポートが公開されているかを確認するには、まずデフォルトのnmap
を使用します ローカルシステムからスキャンする:
[pgervase@pgervase ~]$ nmap opendemo.usersys.redhat.com
Starting Nmap 7.70 ( https://nmap.org ) at 2021-01-07 20:28 EST
Nmap scan report for opendemo.usersys.redhat.com (10.19.47.240)
Host is up (0.041s latency).
Not shown: 993 closed ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
443/tcp open https
3128/tcp open squid-http
5000/tcp open upnp
8008/tcp open http
9090/tcp open zeus-admin
Nmap done: 1 IP address (1 host up) scanned in 3.81 seconds
[pgervase@pgervase ~]$
この出力は、ローカルシステムがサーバーにSSH接続されたときに表示されるよりも少ないパブリックポートを表示できることを示しています。これらの非公開ポートの一部は25であり、マスターによって使用されます。 、および8005、8140、8443、および61613。これらは javaによって使用されます。 。 ps
を見る マスターのPIDの出力とgrep そのnetstat
から 出力、マスター 後置です メーラー:
[root@opendemo ~]# ps auxww | grep 1396
root 1396 0.0 0.0 89740 2188 ? Ss Jan05 0:00 /usr/libexec/postfix/master -w
root 29665 0.0 0.0 112816 968 pts/0 R+ 20:32 0:00 grep --color=auto 1396
[root@opendemo ~]#
その(マスター)はローカルで実行されているため、メールは内部アドレスに送信されますが、受信メールはリッスンされません。また、他のホストにも何も送信されません。
言及された他のポートはjava用でした 。 netstat
を見ると 出力、2つの異なる java プロセスはこれらのポートを担当します:
[root@opendemo ~]# netstat -tlpn | grep java
tcp6 0 0 :::8140 :::* LISTEN 2101/java
tcp6 0 0 127.0.0.1:61613 :::* LISTEN 1135/java
tcp6 0 0 127.0.0.1:8443 :::* LISTEN 1135/java
tcp6 0 0 127.0.0.1:8005 :::* LISTEN 1135/java
[root@opendemo ~]#
ps
を見ると PID 1135の出力、 tomcatによって使用されます :
[root@opendemo ~]# ps auxww | grep 1135
tomcat 1135 0.3 3.5 12409252 2165668 ? Ssl Jan05 9:25 /usr/lib/jvm/jre/bin/java -Xms1024m -Xmx4096m -Djava.security.auth.login.config=/usr/share/tomcat/conf/login.config -classpath /usr/share/tomcat/bin/bootstrap.jar:/usr/share/tomcat/bin/tomcat-juli.jar:/usr/share/java/commons-daemon.jar -Dcatalina.base=/usr/share/tomcat -Dcatalina.home=/usr/share/tomcat -Djava.endorsed.dirs= -Djava.io.tmpdir=/var/cache/tomcat/temp -Djava.util.logging.config.file=/usr/share/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager org.apache.catalina.startup.Bootstrap start
root 31507 0.0 0.0 112816 968 pts/0 S+ 20:53 0:00 grep --color=auto 1135
[root@opendemo ~]#
/usr/share/tomcat/conf/server.xml
を見ると ファイルには、次のようなコンテンツが含まれています:
<Server port="8005" shutdown="SHUTDOWN">
...
<Connector port="8443"
address="localhost"
protocol="HTTP/1.1"
SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="want"
sslProtocols="TLSv1.2"
sslEnabledProtocols="TLSv1.2"
....
これは、使用されるポートが構成ファイルでどのように定義されているかを示しています。
他のjavaを見ると 私が言及したプロセス、ポート8140のPID 2101、これは puppetによって使用されていることがわかります :
[root@opendemo ~]# ps auxww | grep 2101
puppet 2101 0.2 2.5 9787492 1545188 ? Sl Jan05 7:14 /usr/bin/java -Xms2G -Xmx2G -Djruby.logger.class=com.puppetlabs.jruby_utils.jruby.Slf4jLogger -XX:OnOutOfMemoryError="kill -9 %p" -XX:ErrorFile=/var/log/puppetlabs/puppetserver/puppetserver_err_pid%p.log -cp /opt/puppetlabs/server/apps/puppetserver/puppet-server-release.jar:/opt/puppetlabs/puppet/lib/ruby/vendor_ruby/facter.jar:/opt/puppetlabs/server/data/puppetserver/jars/* clojure.main -m puppetlabs.trapperkeeper.main --config /etc/puppetlabs/puppetserver/conf.d --bootstrap-config /etc/puppetlabs/puppetserver/services.d/,/opt/puppetlabs/server/apps/puppetserver/config/services.d/ --restart-file /opt/puppetlabs/server/data/puppetserver/restartcounter
root 31696 0.0 0.0 112816 968 pts/0 S+ 20:55 0:00 grep --color=auto 2101
[root@opendemo ~]#
netstat
に基づく 出力、ポート8140は一般に公開されているはずですが、nmap
私のローカルシステムからは、その結果でそれを報告しませんでした。ここでも、netstat
です。 サテライトサーバーからの出力:
[root@opendemo ~]# netstat -tunap| grep 8140
tcp6 0 0 :::8140 :::* LISTEN 2101/java
[root@opendemo ~]#
およびnmap
ローカルサーバーから:
[pgervase@pgervase ~]$ nmap opendemo.usersys.redhat.com | grep 8140
[pgervase@pgervase ~]$
ただし、nmap
を強制することはできます 特定のポートまたはポートの範囲を確認するには:
[pgervase@pgervase ~]$ nmap -p 8140 opendemo.usersys.redhat.com
Starting Nmap 7.70 ( https://nmap.org ) at 2021-01-07 21:07 EST
Nmap scan report for opendemo.usersys.redhat.com (10.19.47.240)
Host is up (0.039s latency).
PORT STATE SERVICE
8140/tcp open puppet
Nmap done: 1 IP address (1 host up) scanned in 0.39 seconds
[pgervase@pgervase ~]$ nmap -p 8000-9000 opendemo.usersys.redhat.com
Starting Nmap 7.70 ( https://nmap.org ) at 2021-01-07 21:07 EST
Nmap scan report for opendemo.usersys.redhat.com (10.19.47.240)
Host is up (0.040s latency).
Not shown: 999 closed ports
PORT STATE SERVICE
8008/tcp open http
8140/tcp open puppet
Nmap done: 1 IP address (1 host up) scanned in 2.12 seconds
[pgervase@pgervase ~]$
nmap
を強制する これらのポートを確認するために、基本的なnmap
である:8140ポートを確認できました。 スキャンは報告しませんでした。これは、デフォルトのnmap
であることを示しています 余分な引数なしでスキャンすることは、システムを最初に見るには十分かもしれませんが、実際に開いているポートを見逃す可能性があります。
この情報は、システム管理者が潜在的な脆弱性を特定できるように、セキュリティテストで重要です。 nmap
から 出力スキャン、私のシステムでローカルに実行、あなたは公に開いているポートを見ました。以前のバージョンのSatelliteにはtomcatがありました これらのポートの一部が不要なときにパブリックになるように構成されています。その問題に関する議論の一部を読むために、これが解決されたBugzillaを読むことができます。
証明書を確認する
nmap
という別の問題 役立つのは、これらのさまざまなポートで使用されている証明書を確認することです。 nmap
を使用する 、開いているポートを見ました。これらのポートを使用すると、OpenSSLを使用してポートで使用されている証明書を確認できます。それらのポートの多くは、自己署名証明書を使用しています。 nmap
を使用するには OpenSSLを一緒に使用してリモートシステムのポートを確認するには、次のようにします。
$ for port in `nmap -p 1-5000 opendemo.usersys.redhat.com | grep " open " | cut -d "/" -f 1`
> do echo checking on port: $port
> echo | openssl s_client -showcerts -connect opendemo.usersys.redhat.com:$port
> done &> opendemo.certs.txt.`date +%Y%m%d`
私のopendemo.certs.txt.20210127
ファイルの場合、次のようなコンテンツが含まれます:
checking on port: 443
depth=1 C = US, ST = North Carolina, L = Raleigh, O = Katello, OU = SomeOrgUnit, CN = opendemo.usersys.redhat.com
verify return:1
depth=0 C = US, ST = North Carolina, O = Katello, OU = SomeOrgUnit, CN = opendemo.usersys.redhat.com
verify return:1
CONNECTED(00000003)
….
SSL handshake has read 3476 bytes and written 463 bytes
Verification: OK
---
New, TLSv1.2, Cipher is ECDHE-RSA-AES128-GCM-SHA256
Server public key is 2048 bit
Secure Renegotiation IS supported
その出力ファイルを使用して、使用中の証明書が正しいTLSバージョンであることを確認します。
nc
を使用する場合 (またはncat
)、ウェブUIに表示されるよりも多くの情報が表示される場合があります。この例では、nc
を使用しました Webサーバーに接続するには:
$ nc 10.19.47.242 80
asdf
HTTP/1.1 400 Bad Request
Date: Sat, 09 Jan 2021 01:25:40 GMT
Server: Apache/2.4.37 (Red Hat Enterprise Linux)
Content-Length: 226
Connection: close
Content-Type: text/html; charset=iso-8859-1
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
</body></html>
その出力から、インストールされたApacheのバージョンを確認できます。その情報を使用して、攻撃者はサーバーが脆弱なエクスプロイトを知ることができます。このため、Webサーバーは表示される情報の量を制限する必要があります:
[pgervase@pgervase ~]$ nc opendemo.usersys.redhat.com 443
GET / HTTP/1.1
HTTP/1.1 400 Bad Request
Date: Fri, 08 Jan 2021 02:33:08 GMT
Server: Apache
Content-Length: 362
Connection: close
Content-Type: text/html; charset=iso-8859-1
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
Reason: You're speaking plain HTTP to an SSL-enabled server port.<br />
Instead use the HTTPS scheme to access this URL, please.<br />
</p>
</body></html>
[pgervase@pgervase ~]$
この出力には、Apacheのバージョン情報がないことに注意してください。
この次の例では、nc
を使用します クライアントシステムのポート21に接続するには、開いていることがわかります:
[pgervase@pgervase ~]$ nmap 10.19.47.242
Starting Nmap 7.70 ( https://nmap.org ) at 2021-01-08 21:02 EST
Nmap scan report for 10.19.47.242
Host is up (0.039s latency).
Not shown: 996 closed ports
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
80/tcp open http
111/tcp open rpcbind
Nmap done: 1 IP address (1 host up) scanned in 0.83 seconds
[pgervase@pgervase ~]$ nc 10.19.47.242 21
220 (vsFTPd 3.0.3)
その3.0.3バージョンは、システムにSSHで接続し、rpm
を使用すると確認されます。 コマンド:
[root@vulnerable ~]# rpm -q vsftpd
vsftpd-3.0.3-32.el8.x86_64
[root@vulnerable ~]# rpm -qi vsftpd
Name : vsftpd
Version : 3.0.3
Release : 32.el8
<snipped>
繰り返しになりますが、デバイスでApacheバージョンを学習する場合と同様に、環境内で偵察を実行して、潜在的な攻撃者がシステムについて何を学習できるかを知ることが重要です。
カリからのスキャン
次のセクションでは、Kaliサーバーからシステムをスキャンした結果をいくつか示します。この例では、ターゲットサーバーにdistccd
があることがわかっています。 ポート3632で実行されていますが、以前と同様に、nmap
デフォルトではそのポートを検出しないため、具体的に確認する必要がありました:
これで、distccd
がわかりました。 が開いている場合は、nmapの組み込み機能を使用して、悪用される可能性のある場所を特定できます。
プレーンなnmap
のみを使用した場合 スキャンすると、その悪用可能な脆弱性を見逃していたでしょう。私の例では、uname -a
を実行しました リモートシステム上で、しかし私はどんなコマンドでも実行できたでしょう。
識別サービス
nmap
を使用する最後の方法 -sV
を使用します オプション。開いているポートをプローブし、サービスまたはバージョン情報を判別します。この例では、Apacheが実行されているポートを80から90に変更してから、サービスを再起動しました。以下に、プレーンなnmap
の違いを示します。 スキャンしてから-sV
を使用します オプション。サービスをhttpd
として正しく決定しました。 dnsix
ではなく :
[root@pgervase ~]# nmap 10.19.47.242
Starting Nmap 7.70 ( https://nmap.org ) at 2021-01-09 19:57 EST
Nmap scan report for 10.19.47.242
Host is up (0.043s latency).
Not shown: 996 closed ports
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
90/tcp open dnsix
111/tcp open rpcbind
Nmap done: 1 IP address (1 host up) scanned in 1.80 seconds
[root@pgervase ~]# nmap -sV 10.19.47.242
Starting Nmap 7.70 ( https://nmap.org ) at 2021-01-09 19:52 EST
Nmap scan report for 10.19.47.242
Host is up (0.040s latency).
Not shown: 996 closed ports
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 3.0.3
22/tcp open ssh OpenSSH 8.0 (protocol 2.0)
90/tcp open http Apache httpd 2.4.37 ((Red Hat Enterprise Linux))
111/tcp open rpcbind 2-4 (RPC #100000)
Service Info: OS: Unix
[セキュリティについてもっと知りたいですか? ITセキュリティとコンプライアンスのチェックリストを確認してください。 ]
まとめ
システムで実行されているものの詳細なレポートを取得できるようになったので、次に何をしますか?まず、予期しないポートが開いていないことを確認します。このためには、アプリケーションチーム、セキュリティチーム、および同僚に確認してください。次は、公開されたサービスが適切に保護されていることを確認することです。これは、すべてのソフトウェアが更新されていること、更新された暗号がサポートされていること、安全でないプロトコルが使用されていないこと、サービスのデフォルトのパスワードが変更されていることを確認するなどの措置を講じることを意味します。
この記事は、サーバーの調査の概要です。 nc
を使用する およびnmap
開いているポートを確認し、ps
を使用します これらのポートを使用してプロセスをトレースバックするコマンド。 nmap
の使用方法の例も示しました。 --script
を使用 システムをテストするための引数。この学習パスを継続するための次のステップの1つは、nmap
を使用して調査することです。 /usr/share/nmap/scripts/
にあるデフォルトのスクリプトを調査することで攻撃エンジンとして 。