CVEメモ

CVEとは

  • CVEとは、Common Vulnerabilities and Exposures(共通脆弱性識別子)
  • CVEは、ソフトウェアの脆弱性を対象として、米国政府の支援を受けた非営利団体のMITRE社が提供している脆弱性情報データベース

番号の付け方

  • CVEでは脆弱性にユニークな識別番号 「CVE-ID」(CVE-登録時の西暦-通し番号の形式)です。
    • 脆弱性「Heartbleed」は、2014年4月7日にCVE-2014-0160として発表されました。つまり、CVE-ID の構成から、2014年に0160番として登録

JVNとは

JVN(ジェイブイエヌ)は「Japan Vulnerability Notes」の略で、日本国内で使用されているソフトウエアなどの脆弱性関連情報と対策情報の提供を目的にしたポータルサイト

JVN iPedia

  • JVN iPediaは、国内外問わず日々公開される脆弱性対策情報を収集、蓄積することを目的とした脆弱性対策情報データベースです。目的の脆弱性対策情報を容易にご利用いただくために、様々な検索機能をご用意しています。

JVNJVN iPediaはどのように違うのですか?

  • JVN iPediaはJVNの情報に加えて、「脆弱性対策情報データベース(JVN iPedia=ジェイブイエヌ アイ・ペディア)」には日々発見される脆弱性対策情報が収録JVN iPediaは日々発見される脆弱性対策情報を蓄積することで幅広くご利用いただくことを目的としています。JVNに掲載される脆弱性対策情報のほか、国内外問わず公開された脆弱性対策情報を広く公開対象とし、データベースとして蓄積しています。
  • 一方、JVNでは、いち早く一般に周知することを目的に、早期警戒パートナーシップで取扱われた脆弱性関連情報や、 協力関係を結んでいる海外のCERT等からの脆弱性対策情報を掲載しています。JVNの詳細については「JVNとは?」をあわせて参照下さい。

CVSS

基準のこと

  • 脆弱性対策情報データベースでは、共通脆弱性評価システムCVSS(Common Vulnerability Scoring System)を用いて、評価結果およびCVSS基本値の評価内容を記載し、脆弱性の固有の深刻度を表しています。
  • なお、CVSSには、FIRSTから2007年6月20日に公開された共通脆弱性評価システムCVSSv2、2015年6月10日に公開されたCVSSv3が存在し、JVNiPediaでは2015年12月1日より情報セキュリティ早期警戒パートナーシップで報告された脆弱性を対象にCVSSv2、CVSSv3を併記して公開しています。

「CVSSv2」と「CVSSv3」の違いについて

CVSSv2は、攻撃対象となるホストやシステムにおいての「脆弱性による深刻度」を評価していましたが、CVSSv3では、仮想化やサンドボックス化などが進んできていることから、コンポーネント単位で評価する手法を取り込んだ仕様となっています。

用語

CERT

コンピュータセキュリティインシデントに対応する活動を行う組織名称に、しばしば「CERT」という語を用いることがあります。 「CERT」という語は組織によってその意味が異なります。

「CSIRT」(「シーエスアイアールティー」もしくは「シーサート」と読みます)

意味が組織によって異なるのでこのような組織を呼称する際の一般名詞

NVD

JVNipedia のアメリカ版。たぶん、jvnipedia があるのでここまでみなくてよい。ここらへんと連携とってるぽいので。

Cent7インストールメモ

メモ

  • swapもLVMで。他とボリュームグループは異なる
  • ボリュームグループの設定は最大を選択。swapは固定。
  • /bootは通常のパーティションしかむり。LVMは使えない。
  • /boot , swap から作成。その時のswapのボリュームグループはFixed.
  • swapはraidバイス
  • 少ない容量から決めていく
  • とりあえず異なるボリュームグループのマウントポイントを作成しておかないとスペースが無いと怒られる

DELLサーバー起動メモ

メモ

  • 繋いでいないSATAポートがあればOFFにする
  • 起動順番、起動デバイスはもちろんBIOSで変更する
  • CDROMで起動するときはBIOSで起動順番変更
  • 起動順番を変更しただけではCDROMから上手く起動しないとき、BIOSから直接選択して起動。ただしこで起動しないことがある。。その時はBIOSから設定をもう一度してやれば一発でCDからインストーラーが起動したりした

割り込みメモ

割り込み

  • 入出力処理中のプロセスは、割り込みによって入出力完了が通知されるまで実行権を手放します。

  • 割り込み

    • ハードウェア割り込み
      • タイマー割り込み(タイマーコントローラが一定周期で割り込みを発生させる)
      • 外部装置から
      • プロセッサ間割り込み
      • NMI割り込み
    • ソフトウェア割り込み
      • intn命令
  • 例外 (CPUの動作自体によって引き起こされる事象)
    • フォルト
      • セグメントやページの保護機能
    • トラップ
      • INTO,INT3命令
    • アボート
      • 処理を継続できないようなエラー発生した時

割り込み、例外、それぞれにハンドラが設定してある。 通常の割り込みはマスクすることによってCPUが割り込みを受け取れないようにすることができる。

ハードウェア割り込みハンドラの起動

  • 外部装置
    • 割り込みコントローラに対して割り込み要求

  • 割り込みコントローラ
    • そのデバイスからの割り込みが禁止されていな ければ、CPUに対して割り込み要求を行います

  • CPU
    • 処理中断。割り込みエントリ関数do_IRQ()呼び出し

  • do_IRQ()
    • IRQ番号から、そのIRQに対応したirq-descテーブルのエントリを求めます。 このエントリに登録されている割り込みハンドラを実行するhandleJRQ_event関数は、登録されている 割り込みハンドラを呼び出します。複数の割り込みハンドラが登録されていた場合、そのすべてのハンドラ を呼び出します。

応答性の確保

応答性を必要とするものはハードウェア割り込みハンドラで実行 必要の無いものは後でまとめてソフト割り込みで実行

ハードウェア割り込み

  • デバイスドライバへの通知手段として利用。目的のデバイスドライバが用意している割り込みハンドラを呼び出す。
  • ドライバ読み込み時に、割り込み処理テーブルの各割り込み種別(IRQ)にドライバのハンドラを登録している
  • 一つのIRQのエントリに複数の割り込みハンドラを登録できる
  • マスク負荷割り込み(NMI)は必ず割り込むことができる。

ソフト割り込み

  • ソフトウェア割り込みとは異なる
  • ソフト割り込みは、ハードウェア割り込み処理が要因となり発生します。ソフト割り込みハンドラは、ハードウェア割り込みハンドラで行った処理を引き継ぎ、動作します。
  • ハードウェア割り込みと連携、効率的に動作する。
  • ハードウェア割り込みを禁止しない
  • ソフトウェア割り込みとは別枠
  • do_softir()

割り込みは素早くやる必要あり。よってソフト割り込みが利用される。 ソフトウェア割り込みでは普通にスケジューリングされる?

時計メモ2

時計

  • 世界標準時1970年1月1日0時からの経過時間をxtime変数に記録することで時計を実現しています
  • Linuxカーネル起動時にハードウェアカレンダの値で初期化された後は、一定周期に動 作するグローバルタイマー割り込みハンドラ(do_timer関数)で時刻が進められます。
  • 1970年1月1日0時からの経過時刻(秒数)で表現している。
  • 時間の経過はタイマー割り込みで通知。タイマー割り込みごとに少しずつ進めている。
  • dateコマンドを実行すると(timeシステムコール、gettimeofdayシステムコールを呼び出すと)、 Linux内部時計の時刻を得ることができます。

役割

時間の管理と時限処理

ハードウェアのカレンダ

  • 本質的にLinuxとは無関係の世界で独自に時刻を刻んでいます。Linuxカーネルは、起動時にハードウェアのカレンダをLinux内部時計(xtime変数)に反映させます。そのあとは、原則Linux内部 時計とハードウェアのカレンダの同期は行いません。 シャットダウン時などにシステムクロックとハードウェアクロックを同期させているみたい。

xtime変数

世界標準時1970年1月1日0時からの経過時間をxtime変数に記録

jiffies

  • Linuxカーネル起動時を0とする時刻です。これはLinuxカーネル起動後に発生したタイマー割り込みの回数を数えることにより実現しています
  • Linux内部の時限処理のベースとしてのみ利用されています
  • 通常時にはこの値は変更できません。jiffiesの値はタイマー割り込みハンドラ(dojimer関数)のみが変更可 能で、唯一、マシン再起動によってリセットされます。

3つの時計

  • グローバルな時計処理割り込み(グローバルタイマー割り込み) ハードウェア割り込み

    • システムの時刻を進めることが目的
    • システム上のいずれかのCPUに対して割り込みが発生する
    • グローバルタイマー割り込み → do_timer()
  • CPUローカルな時計処理(ローカルタイマー割り込み) 八一ドウェア割り込み

    • smp_locaLtimer_interrupt()がハンドラ → run_timer_softirq() ソフト割り込みハンドラ
    • タイマーリストを監視するみたい

do_timer() ハードウェア割り込みのハンドラ

  • システム起動後に発生したタイマー割り込みの回数を記録するjiffies変数にl
  • clac_load(ticks)ロードアベレージ(システム負荷)を計算

グローバルタイマー割り込みの遅延

高負荷時に、グローバルタイマー割り込みハンドラが期待どおりに動作せず、複数のタイマー割り込みに対し、1回だけグローバルタイマー割り込みハンドラが動作する可能性があります。そのまま普通にタイマー割り込みハンドラ(do-timer関数を実行すると、時刻が遅れることになります。アーキテクチャ依存ですが、この遅れを検出し、正常な時刻に設定し直す機能が実装されています。

タイマーリスト

  • Linuxも伝統的なUNIXと同様に、登録した一定時間後にコールバックされるハンドラを登録するための、汎用の仕組みを備えています。
  • とくにネットワークプロトコル 処理やデバイスドライバ処理におけるタイムアウト処理、再実行処理に数多く利用
  • Linuxカーネルでは、実行してほしい時刻を指定して、ハンドラを登録します。ここでは説明のために、実 行してほしい時刻のことを起動時刻と呼ぶことにします。起動時刻を指定してタイマーリストにハンドラを登 録しておくと、ローカルタイマーソフト割り込みハンドラがこの起動時刻を監視し、指定した時刻が来たとき に登録したハンドラを呼び出してくれます

まとめ

グローバルもローカルもタイマー割り込みはハードウェア割り込み

Linuxの時計

概要

時計メモ

メモ

時刻 - ArchWiki

ノート: デフォルトでは systemd はハードウェアクロックに UTC を使用します。

Linux を使う時はハードウェアクロックを UTC 時刻系に設定するのが有益です

用語

  • UTC

    • 世界各地の標準時を決めるときの基準となる「世界標準時」のこと
  • タイムゾーン(時間帯)

    • 同じ標準時を利用する地域や区分のこと
  • ローカルタイム(地方時)

    • UTCとの差で表わされる実際の時間
    • 日本のローカルタイム(JST)はUTC+09:00 あるいは GMT+09:00

ハードウェアクロックまたはリアルタイムクロック(RTC)

  • マザーボードが持つ内部時計であり、BIOS クロックやCMOS クロックとも呼ばれます。マザーボード上の IC に実装
  • CentOSではデフォルトではハードウェアクロックをUTCを標準時を参照しているように考えてシステムクロックを設定するみたい。
  • LINUXが起動する時に一度だけ参照。
  • また、RTCはさほど精度が高くないこともあり、定期的にインターネット上のNTPサーバーから現在時刻を取得しRTCに書き込むということも行われます。最近のWindowsではデフォルトでマイクロソフトのNTPサーバーを参照しています。
  • MacLinuxでは、RTCからUTC(協定世界時)を設定しておきOS側でタイムゾーンや夏時間の時差を足し引きしてローカルタイムを表示しているようです。

システムクロック

  • 一般的に、UTC を使う OS は起動時に CMOS (ハードウェアクロック) の時間を UTC 時間 (GMT, Greenwich time) だと認識して、あなたのタイムゾーンによってその時間を調整してシステム時刻を設定します。
  • OSは起動されるとハードウェア クロックの時刻情報を読み出し、基準時刻からの経過秒数の形式に編集してOSが管理するメモリ内にシステム クロックとして格納します。
  • システムクロックの更新はタイマー割り込み毎に加算され、基準時刻からの経過秒数で現在の時間を運用(時計の進行)する。

NTPの必要性

  • ログの時間の整合性をあわせるなどなど、ネットワーク内の複数のシステムで同じ時間に合わせる必要があるのでNTPを利用する。
  • 時間が正確
  • /etc/ntp.conf でntpサーバを設定。ntpdを起動させる。
  • 即時に合わせる場合、nttdate ntpサーバで合わせることができる。

まとめ

工場でマザーボード作成。現在の時間設定される。以後動き続ける。

届く

Linuxサーバ設定、起動

起動時にRTCを参照。 LinuxではRTCをUTCをとして認識、そこからlinuxタイムゾーンにあった時間に変換(システム クロックの設定)

↓ 運用

システムで時間を統一する必要ntpの導入(システムクロックの値はntpdから取得)

問題

  • RTCはずれる。「ハードウェア クロックはあまり正確ではない」と言われているくらいらしい
  • RTCがずれたままだど再起動する度にずれた時間が設定される。(ntpdで修正されるも即時ではない場合、時間がかかる)

システムクロックとRTCを同期する。 デフォルトでタイミングは再起動やシャットダウン

これでRTCとシステムクロック同期するのでずれない。 また、NTPで各サーバーの時間も同期。NTP使うので時間は正確。

参考

時刻 - ArchWiki

naitaku.hatenablog.com

パソコンの時計 ハードウェアクロックとシステムクロック

メモリメモ

コピーオンライトがあるのでスレッドよりもプロセスが重いなんてことはない。昔の話。

# cat /proc/meminfo 
MemTotal:        1020096 kB
MemFree:           71060 kB
Buffers:           45848 kB
Cached:           762244 kB
SwapCached:         5980 kB
Active:           183652 kB
Inactive:         668244 kB
Active(anon):      13576 kB
Inactive(anon):    30580 kB
Active(file):     170076 kB
Inactive(file):   637664 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:       5079036 kB
SwapFree:        5054380 kB
Dirty:               248 kB
Writeback:             0 kB
AnonPages:         38924 kB
Mapped:            12704 kB
Shmem:               308 kB
Slab:              76584 kB
SReclaimable:      22564 kB
SUnreclaim:        54020 kB
KernelStack:        1600 kB
PageTables:         2288 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     5589084 kB
Committed_AS:     157228 kB
VmallocTotal:   34359738367 kB
VmallocUsed:        8340 kB
VmallocChunk:   34359717896 kB
HardwareCorrupted:     0 kB
AnonHugePages:      2048 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:        8180 kB
DirectMap2M:     1040384 kB

物理メモリの配分

64ビットではLowメモリとHighメモリの区別もなくなる 全てのメモリ領域がカーネルが利用できるLowメモリ領域として認識される ユーザーメモリとカーネルメモリ

ユーザメモリの分類

Anonymous (anon)

プログラムの実行中に動的に確保したメモリ。mallocとか。

File-backed(file)

ディスクキャッシュなど、ディスク上にもある種類ものと対応がある。

active

最近利用

inactive

長時間利用されていない

4種類のLRUリスト(Least Recently Used)

  • anon(active)
  • anon(inactive)
  • file(active)
  • file(inactive)

プラス

  • 原理的に開放できないもの Unevictableリスト

移動する

  • メモリの状況によって移動する。
  • anon(active) ←→ anon(inactive)
  • file(active) ←→ file(inactive)

カーネルメモリの分類

  • そもそも仮想空間ない。物理に直接
  • そもそもカーネルでは2つのメモリ管理
  • データの形式によって事前に2つの方式でまとめて確保している
    • Buddyシステム(Buddyアロケータ)
      • 4Kb以上
    • Slabアロケータ
      • 4KB以下
  • vmalloc()
    • カーネルの仮想領域が確保され、Buddyシステムから実ページを割り当てて、マッピングされる
    • 実メモリ上で連続していなくても良いケースで使用します。Buddyシステムを直接使用する場合と比較して、大きな領域を確保しやすいこと、最大オーダーの制約がないことが特徴です。
    • カーネル内部では予めこのような目的で使用する論理アドレスの範囲が決められていて、VmallocTotalがその範囲の容量。VmallocUsedが実際に使用されている容量。