2014.03.19 linux joshi_security_public
DESCRIPTION
2014年3月19日のLinux女子部第7回勉強会資料。 セキュリティのおさらい。TRANSCRIPT
サーバーセキュリティの基本を見直そう!Linux女子部07 「firewalld&Linuxセキュリティ勉強会」
Ryo Fujita
いしかわさんごめんなさいは甘え
�2
出オチ?
アジェンダRed Hatのドキュメント 脆弱性タイプとRHELで扱う領域 エラータ トラフィック制御 認証 暗号化 SELinux 評価 宣伝
�3
Red Hatのドキュメントhttp://docs.redhat.com/
セキュリティガイドは日本語版があります!
読みましょう
�4
脆弱性タイプとRHELで扱う領域
�5
出典:「共通脆弱性タイプ一覧CWE概説」 http://www.ipa.go.jp/security/vuln/CWE.html
そもそもエラータって何?
エラータ
�6
ソース
SPECファイル
エラータ コンパイルRPMビルド
バイナリ
RPMパッケージ
SRPMパッケージ
パッチ
種類RHSA:Red Hat Security Advisory 今回のお話の中心はこれ RHBA:Red Hat Bug Advisory バグ・不具合の修正 RHEA:Red Hat Enhancement Advisory 新規機能、機能強化
�7
重大度4段階
Critical
Important
Moderate
Low
�8
影響範囲の調査RHSAにはCVEが付く
yum-plugin-security
# yum list-sec cves!
yum-security(8)
�9
影響範囲の調査(続き)RPMパッケージでの調査 # rpm -q --changelog kernel
!
[0000000]はbugzillaのID http://bugzilla.redhat.com/0000000
�10
* Fri Jan 10 2014 Petr Holasek <[email protected]> [2.6.32-431.5.1.el6]- [net] sctp: fix checksum marking for outgoing packets (Daniel Borkmann) [1046041 1040385]- [kernel] ptrace: Cleanup useless header (Aaron Tomlin) [1046043 1036312]- [kernel] ptrace: kill BKL in ptrace syscall (Aaron Tomlin) [1046043 1036312]
蛇足https://rhn.redhat.com/rpc/api
エラータの情報をxmlrpcで得られる(要アカ)
JSONだともっと良いんだけどなぁ
�11
{'errata_update_date': '2/12/14', 'errata_topic': 'Updated mysql packages that fix several security issues and one bug are\nnow available for Red Hat Enterprise Linux 6.\n\nThe Red Hat Security Response Team has rated this update as having moderate\nsecurity impact. Common Vulnerability Scoring System (CVSS) base scores,\nwhich give detailed severity ratings, are available for each vulnerability\nfrom the CVE links in the References section.\n', 'errata_type': 'Security Advisory', 'errata_severity': 'Moderate', 'errata_notes': '', 'errata_synopsis': 'Moderate: mysql security and bug fix update', 'errata_references': 'https://access.redhat.com/security/updates/classification/#moderate\nhttp://www.oracle.com/technetwork/topics/security/cpujan2014-1972949.html#AppendixMSQL\nhttp://dev.mysql.com/doc/relnotes/mysql/5.1/en/news-5-1-73.html', 'errata_last_modified_date': '2014-02-12 13:20:29.0', 'errata_issue_date': '2/12/14', 'errata_description': 'MySQL is a multi-user, multi-threaded SQL database server. It consists of\nthe MySQL server daemon (mysqld) and many client programs and libraries.\n\nThis update fixes several vulnerabilities in the MySQL database server.\nInformation about these flaws can be found on the Oracle Critical Patch\nUpdate Advisory page, listed in the References section. (CVE-2014-0386,\nCVE-2014-0393, CVE-2014-0401, CVE-2014-0402, CVE-2014-0412, CVE-2014-0437,\nCVE-2013-5908)\n\nA buffer overflow flaw was
レポジトリyumレポジトリが色々あるけど…
本番サーバに出所の分からないRPMはダメ、絶対
まずはRHEL公式
親チャネルだけでなく、OptionalやSupplementaryなども探す
無ければEPEL
�12
トラフィック制御不要なサービス
ファイアウォール
TCPWrapper
xinetd
�13
不要なサービス全部止めてから必要なものだけ動かす # chkconfig --list | awk '{print "service "$1" off"}' > stop_all.sh!
# chkconfig hoged on!そもそも不要なパッケージはインストールしない 危険なサービス(telnet, ftp etc.)は利用しない 何かポート開いてない?
�14
# netstat -tanp | grep LISTEN
ホストレベルのファイアウォール 中井さんの話を聞いちゃったからには設定せずにいられないはず
というか、使ってますよね、普通。 iptables / ip6tables / ebtables 次はnftablesの時代が来ます 日経Linux2月号にちょろっと書いた
iptables / firewalld
�15
8 2014.2 Nikkei Linux
「nftables」は、従来の「iptables」や「ip6tables」などの置き換えを狙ったものだ。Patrick McHardy氏が2008年に単独で開発を始めたが、数年間、開発が停滞していた。しかし、2012年から再開し、次期版のカーネル3.13で開発のメインラインにマージが予定されている。 nftablesの開発目的は、iptablesやip6tablesの各種課題を解消すること。具体的には、「カーネル空間およびユーザー空間のコードの重複によるメンテナンス性の低下」「パケットフィルタリングのルールが増大した際の性能低下」「動的なフィルタリングが不可能」「ユーザー空間の仕組みを修正するにはカーネルの変更が不可欠なこと」といった課題を指す。
nftablesでは、ルールを記したテーブルをユーザーが定義する。この定義を、netfilterのフックにアタッチすることで、パケット処理を実施する。カーネル空間とユーザー空間の通信には「nfnetlink」ソケットが使われ、ユーザー空間からはルールの追加(ADD)、削除(DELETE)、ダンプ(DUMP)の3種類の操作のみ可能だ。また、フィルタリングやルーティング、アドレス変換のルールは、動作中にも適宜変更できる。 従来の実装とnftablesの実装を示すと図1のようになる。
netfilter内にnftablesのモジュールが実装され、「libmnl」と「libnftables」を経由し、nftコマンドでルールを設定する。 最新のFedora 20では、「rawhide」リポジトリーに「カーネル3.13」「libmnl」「libnftables」がバイナリパッケージとして用意されている。これらをインストールし、nftコマンドのみをコンパイルして導入すれば、nftablesが使える(図2)。 nftコマンドには「ファイル」「コマンドライン」「対話」の3つの実行モードがある。図3では、IPv4のフィルターをファイルモードで有効にした後、TCP80番ポートを宛先とするパケットをドロップするルールを2つのモードで設定している。
(レッドハット 藤田 稜)
ルール増大による性能低下防止稼働中にルールが変更可能新しいパケットフィルター「nftables」が次期版のカーネル3.13にマージされる予定だ。nftablesでは、フィルタリングルール増大による性能低下を防ぎ、動的にルール変更ができるようになっている。なお、Fedora 20なら比較的簡単にnftablesを試せる。
新パケットフィルター「nftables」
Linuxレポート
IPv4のフィルターを有効にする# nft -f nftables/files/nftables/ipv4-filter
❶コマンドラインモードの例# nft add rule ip filter input tcp dport 80 drop # nft list table filter -a
❷対話モードの例# nft -i nft> add rule ip filter input tcp dport 80 drop nft> list table filter ルール確認
図3 nftコマンド「ファイルモード」「コマンドラインモード」「対話モード」の3つの実行モードがある。
ルール設定
ルール設定
ルール確認
$ su # yum install fedora-release-rawhide # yum-config-manager --disable fedora updates updates-testing # yum update yum kernel # yum install kernel-devel kernel-headers libmnl libnftables autoconf automake flex bison libmnl-devel libnftables-devel gmp-devel readline-devel # yum-config-manager --enable rawhide # git clone git://git.netfilter.org/nftables # cd nftables # ./autogen.sh # ac_cv_func_malloc_0_nonnull=yes ac_cv_func_realloc_0_nonnull=yes ./configure # make && make install # reboot
図2 nftablesの導入Fedora 20にインストールする例
このマークで改行
図1 従来の実装とnftablesの実装Fedoraで実装されているツール「firewalld」との関係も示した。なお、firewalldはnftablesには未対応。
system-config-firewall
iptables(service)
iptables(command)
netfilter
firewalld(daemon & service)
firewall-config
firewall-cmd
nft(command)
libnftables
libmnl
netfilter
firewalld(daemon & service)
nft_*
従来の実装 nftablesの実装
iptablesやip6tablesとの互換性を保てる
TCPWrapperlibwrap.soにリンクされているバイナリで利用可能 lddで確認
/etc/hosts.[deny | allow]で設定 通常、denyはALL : ALL allowで許可 ALL: LOCAL ALL: 192.168.1. postfix: ALL
�16
# ldd /usr/sbin/sshd | grep libwrap libwrap.so.0 => /lib64/libwrap.so.0 (0x00007f031e925000)
xinetdスーパーサービス
systemdが代替可能
/etc/xinet.d/以下で個別サービスの設定
�17
service tftp{ disable = no socket_type = dgram protocol = udp wait = yes user = root server = /usr/sbin/in.tftpd server_args = -s /var/lib/tftpboot per_source = 11 cps = 100 2 flags = IPv4 }
Connection Per Second で制御可能
認証パスワード
PAM
�18
パスワードOpenCLを有効にしたJohn the Ripperで… やばすぎる…、以前のsha256は特に… わ、忘れちゃってもどうにかなるよ? ちゃんとmkpasswdとか使いましょう expectパッケージで提供 簡易のチェッカー:cracklib-check cracklibパッケージで提供
�19
PAMPluggable Authentication Module
ごめん、これ説明する時間は無い
デフォルトで利用していることが多い(?)
高度な設定が可能
�20
暗号化ディスクの暗号化
通信の暗号化
�21
ディスクの暗号化LUKS:Linux Unified Key Setup-on-disk-format
Anacondaでインストール時に暗号化
インストール後に暗号化
cryptsetupを利用
�22
通信の暗号化telnet、ダメ、絶対!
ssh / scp / sftpで
VPN
ipsec / xl2tpdで
�23
SELinuxRHはEnforcingでしかテストしてません RHELに同梱されるソフトウェアはEnforcingで動くことが大前提 ISVが提供するソフトは知らない 自分たちの書いてるソフトが、どのリソースをどのように利用(アクセスベクター)するか把握してないISVのソフトって大丈夫なの?という疑問
(やっと)案件増えてきました 官公庁とか防衛とか金融とか
サポートするベンダーも増加 Fさんとか大丈夫なはず
�24
SELinuxchcon / restoreconする デフォルトのファイルのラベルを見てラベル貼る ポリシーに従ってラベルを貼り直す
setseboolを活用する 一覧はgetsebool -a
�25
# getsebool -a | grep httpdallow_httpd_anon_write --> offallow_httpd_mod_auth_ntlm_winbind --> offallow_httpd_mod_auth_pam --> offallow_httpd_sys_script_anon_write --> offhttpd_builtin_scripting --> onhttpd_can_check_spam --> offhttpd_can_network_connect --> on……
評価Nessus:脆弱性スキャナー
評価版ライセンスが利用可能
商用で継続利用するなら買いましょう
nmap:ポートスキャナー
外部からポートスキャンする
OSの種類なども推測可能
�26
宣伝GPS:Global Professional Services コードレベルでの調査とか実装の手伝いとか
GLS:Global Learning Services Red Hat Certified Engineerを始めとする実技を含む講義・認定テスト セキュリティはRHCE + RHCSS http://jp-redhat.com/training/certification/#RHCSS
ちょっと高いけど、受講したら絶対満足なはず!
�27