kubota-dit
    • Create new note
    • Create a note from template
      • Sharing URL Link copied
      • /edit
      • View mode
        • Edit mode
        • View mode
        • Book mode
        • Slide mode
        Edit mode View mode Book mode Slide mode
      • Customize slides
      • Note Permission
      • Read
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Write
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Engagement control Commenting, Suggest edit, Emoji Reply
    • Invite by email
      Invitee

      This note has no invitees

    • Publish Note

      Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

      Your note will be visible on your profile and discoverable by anyone.
      Your note is now live.
      This note is visible on your profile and discoverable online.
      Everyone on the web can find and read all notes of this public team.
      See published notes
      Unpublish note
      Please check the box to agree to the Community Guidelines.
      View profile
    • Commenting
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
      • Everyone
    • Suggest edit
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
    • Emoji Reply
    • Enable
    • Versions and GitHub Sync
    • Note settings
    • Note Insights New
    • Engagement control
    • Transfer ownership
    • Delete this note
    • Save as template
    • Insert from template
    • Import from
      • Dropbox
      • Google Drive
      • Gist
      • Clipboard
    • Export to
      • Dropbox
      • Google Drive
      • Gist
    • Download
      • Markdown
      • HTML
      • Raw HTML
Menu Note settings Note Insights Versions and GitHub Sync Sharing URL Create Help
Create Create new note Create a note from template
Menu
Options
Engagement control Transfer ownership Delete this note
Import from
Dropbox Google Drive Gist Clipboard
Export to
Dropbox Google Drive Gist
Download
Markdown HTML Raw HTML
Back
Sharing URL Link copied
/edit
View mode
  • Edit mode
  • View mode
  • Book mode
  • Slide mode
Edit mode View mode Book mode Slide mode
Customize slides
Note Permission
Read
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Write
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Engagement control Commenting, Suggest edit, Emoji Reply
  • Invite by email
    Invitee

    This note has no invitees

  • Publish Note

    Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

    Your note will be visible on your profile and discoverable by anyone.
    Your note is now live.
    This note is visible on your profile and discoverable online.
    Everyone on the web can find and read all notes of this public team.
    See published notes
    Unpublish note
    Please check the box to agree to the Community Guidelines.
    View profile
    Engagement control
    Commenting
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    • Everyone
    Suggest edit
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    Emoji Reply
    Enable
    Import from Dropbox Google Drive Gist Clipboard
       Owned this note    Owned this note      
    Published Linked with GitHub
    • Any changes
      Be notified of any changes
    • Mention me
      Be notified of mention me
    • Unsubscribe
    [HACK#98 Snortを利用した侵入検知](https://github.com/careerbeat/dit-ehime/wiki/%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3HACKS-Wiki-%E7%AC%AC%E5%8D%81%E7%AB%A0-%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E4%BE%B5%E5%85%A5%E6%A4%9C%E7%9F%A5#hack98-snort%E3%82%92%E5%88%A9%E7%94%A8%E3%81%97%E3%81%9F%E4%BE%B5%E5%85%A5%E6%A4%9C%E7%9F%A5) [HACK#99 アラートの追跡](https://github.com/careerbeat/dit-ehime/wiki/%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3HACKS-Wiki-%E7%AC%AC%E5%8D%81%E7%AB%A0-%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E4%BE%B5%E5%85%A5%E6%A4%9C%E7%9F%A5#hack99-%E3%82%A2%E3%83%A9%E3%83%BC%E3%83%88%E3%81%AE%E8%BF%BD%E8%B7%A1) [HACK#100 Snortの監視](https://github.com/careerbeat/dit-ehime/wiki/%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3HACKS-Wiki-%E7%AC%AC%E5%8D%81%E7%AB%A0-%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E4%BE%B5%E5%85%A5%E6%A4%9C%E7%9F%A5#hack100-snort%E3%81%AE%E7%9B%A3%E8%A6%96) [HACK#101 リアルタイムモニターリング](https://github.com/careerbeat/dit-ehime/wiki/%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3HACKS-Wiki-%E7%AC%AC%E5%8D%81%E7%AB%A0-%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E4%BE%B5%E5%85%A5%E6%A4%9C%E7%9F%A5#hack101-%E3%83%AA%E3%82%A2%E3%83%AB%E3%82%BF%E3%82%A4%E3%83%A0%E3%83%A2%E3%83%8B%E3%82%BF%E3%83%BC%E3%83%AA%E3%83%B3%E3%82%B0) [HACK#102 センサーの管理](https://github.com/careerbeat/dit-ehime/wiki/%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3HACKS-Wiki-%E7%AC%AC%E5%8D%81%E7%AB%A0-%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E4%BE%B5%E5%85%A5%E6%A4%9C%E7%9F%A5#hack102-%E3%82%BB%E3%83%B3%E3%82%B5%E3%83%BC%E3%81%AE%E7%AE%A1%E7%90%86) [HACK#103 オリジナルのSnortルールを書く](https://github.com/careerbeat/dit-ehime/wiki/%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3HACKS-Wiki-%E7%AC%AC%E5%8D%81%E7%AB%A0-%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E4%BE%B5%E5%85%A5%E6%A4%9C%E7%9F%A5#hack103-%E3%82%AA%E3%83%AA%E3%82%B8%E3%83%8A%E3%83%AB%E3%81%AEsnort%E3%83%AB%E3%83%BC%E3%83%AB%E3%82%92%E6%9B%B8%E3%81%8F) [HACK#107 分散ステルスセンサーネットワークの構築](https://github.com/careerbeat/dit-ehime/wiki/%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3HACKS-Wiki-%E7%AC%AC%E5%8D%81%E7%AB%A0-%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E4%BE%B5%E5%85%A5%E6%A4%9C%E7%9F%A5#hack107-%E5%88%86%E6%95%A3%E3%82%B9%E3%83%86%E3%83%AB%E3%82%B9%E3%82%BB%E3%83%B3%E3%82%B5%E3%83%BC%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%81%AE%E6%A7%8B%E7%AF%89) # HACK#98 Snortを利用した侵入検知 ## 概要 - Snort(ネットワーク侵入検知システム:NIDS)を用いてネットワークへの侵入を監視する - ログを見るだけでは不正アクセスを検知できない ## 背景 ### 侵入検知システム(IDS)とは - ネットワークを流れるパケットに対してあるパターンに合致しているか否かを判定し、合致している場合はあらかじめ定められた処理を行う - 「あらかじめ定められた処理」は管理者へアラートを出すなどである - IDSとファイアウォールはお互いに補間し合う関係にある<br> ※ファイアウォールはパケットが悪意のあるものかどうかを判断しないが、IDSはそれを行う ### IDSの分類 #### ネットワーク型(NIDS)とホスト型(HIDS) - ネットワーク型:ネットワークに流れるパケットすべてを監視する - ホスト型:IDSが稼働しているコンピュータ自身を監視する #### シグネチャ型とアノマリ型 - シグネチャ型:「○○○○の場合は不正アクセスである」といった情報(シグネチャ)と現在のパケットを照らし合わせ、合致した場合に不正アクセスと判断する - アノマリ型:「○○○○という状態が正常である」といった情報を何らかの手段により蓄積しておき、それと現在の状況を照らし合わせ、一定の閾値を超えた場合に「異常である」と判断する ### なぜ侵入検知システムが必要か - ログは攻撃者自身によって改ざんされる可能性があるため、不正アクセスを必ず見破れるとは限らない - パケットのパターンによってより確実に不正アクセスを検知する ## 前提知識 ### Snortとは - シグネチャ型のNIDS(ネットワークに流れるパケットすべてを監視して、シグネチャとパケットを比較することにより不正アクセスを検知する) - オープンソースのソフトウェア - 新しい攻撃手法が発見された場合も、自らシグネチャを作成することができる - 不正アクセスを検知した場合のアラートの手段には、Syslog、ファイル出力、データベースへ記録するなど様々な形式がある 下記でSnortを用いてネットワークへの侵入を検知する方法を解説する ## 確認方法:TODO # HACK#99 アラートの追跡 ## 概要 - BASEによってSnortのアラートを管理する - 大量の通信が発生するネットワークを監視すると、アラートも大量になるため ## 背景 HACK#98でも述べた通り、Snortでネットワークを監視して発生したアラートは、Syslogやデータベースなどに記録される その中から特定のアラートを探したり削除したりするのは手間のかかる作業である そこで、「BASE」を用いることで、Snortのアラートデータベースを可視化し、アラートの管理を容易にする ## 前提知識 ### BASEとは - SnortのアラートデータベースをWebブラウザで閲覧できるようにGUIを提供するもの - 様々な条件、ルール、発生時期、送信元/宛先、IPアドレス、ポート番号などによってアラートを検索して表示することが可能 - アラートのグループ化、削除、電子メールで送信、バックアップなども可能 下記にBASEによるSnortで発生したアラートの管理方法について解説する ## 確認方法:TODO # HACK#100 Snortの監視 ## 概要 - SnortALogを用いて、Snortやファイアウォールで記録されるログをレポート化する - 不正アクセスを分析するためには、どのくらいの危険度のアクセスログが何件あったなどといった時系列データが必要となることがある ## 背景 BASEによってSnortが検出したアラートを詳細な条件に従って細かく管理することができるが、レポート化する機能が備わっていない レポート化されていないと、重大な不正アクセスを見逃してしまって、それに対する対策が怠慢になってしまう可能性がある そこで、「SnortALog」を用いて、Snortが検出したアラートをレポート化して時系列的に可視化する ## 前提知識 ### SnortALogとは - Snortやファイアウォールで記録されるログを集計して出力するもの - テキストやHTML、PDFといった形式でレポートを作成できる - gtkを用いてX Windowに表示させることもできる<br> gtk(gimp tool kit):GIMPを開発するためのツールキット<br> GIMP(GNU Image Manipulation Program):ビットマップ画像編集・加工ソフトウェア 下記でSnortALogを用いたSnortのログを集計してレポートを作成する方法を解説する ## 確認方法:TODO # HACK#101 リアルタイムモニターリング ## 概要 - Squilを用いてIDSのイベントログの相関分析を行い、イベントログの詳細を解析する - 膨大な量のログを得られてもそれらを分析しないとそれらの持つ意味が分からない ## 背景 HACK#98で記述した通り、IDSではネットワークまたはホストにおいて通信された種々の情報やシステムの状態などの情報がログとして記録される そのログには誰がログインしたか、どのようなデータが流れたか、どのようなエラーが発生したかなどのデータが時間と共に記録される ログに記録されたそれらの情報を知るためには、ログを適切に分析しなければならない ログを分析する方法として以下が挙げられる #### ログを分析する方法 | 分析手法 | 特徴 | | --- | --- | | 統計分析 | 一定期間のアクセス数やアクセスの頻度などの情報を表やグラフに表して分析する<br>統計的情報から逸脱したデータを検知し不正アクセスを判定する<br>閾値をどこにするかにより検出率と誤検知率が変化する | | イベント分析 | 1回の攻撃で複数のログが記録されることも多いことを踏まえて、IDSで検知した通信などを総合的に分析する | | データマイニング(相関分析) | 大量のログデータからある傾向や相関関係などを見つけ出す<br>通常数回のステップを踏んで相関関係を絞り込んでゆくので手間がかかるが、有効な情報を得ることができる | このHACKで紹介する「Sguil」は相関分析によってログを分析する ## 前提知識 ### Sguilとは - Tcl/Tkによって記述されたグラフィカルな解析コンソール<br> ※Tcl/Tk:スクリプト言語TclとそのGUIツールキットTk - クライアントサーバ型のアプリケーション(3つのパーツから構成) - op_guil:Barnyardのプラグイン<br> ※Barnyard:Snortでアラートをフォーマットして指定した形式で出力するもの - sguild:サーバ - sguil.tk:クライアント - Squilのエージェントで検知された情報がサーバにレポートされる - サーバがエージェントからのデータを元に相関分析を行う 下記でSguilを用いたIDSのイベントログの相関分析方法について解析する ## 確認方法:TODO # HACK#102 センサーの管理 ## 概要 - SnortCenterを利用してNIDSセンサーを統一的に処理する - 通常、NIDSセンサーの管理は各センサー単位で行うので、非常に手間がかかる ## 背景 まず、センサーとは実際に不正アクセスの検知を行うものである Snortでは、事前に設定されたルールに従ってセンサーで不正アクセスの検知を行う センサーにはそれぞれ固有のルールが設定されていて、センサーの起動・停止であったりアラートを出すのは個別に行われる そのため、センサーの管理は個別で行わなければならず、大変な作業となる このHACKで紹介する「SnortCenter」は、上記のような個別に行われる操作を1つのアプリケーションで統一的に行うことができる ## 前提知識 ### SnortCenterとは - 複数のNIDSのセンサーを統一的に管理する - Webベースのコンソールと各NIDSセンサー上で動作するセンサーエージェントで構成される - 独自のユーザー認証機構により、Webコンソールと各センサーエージェント間の通信を暗号化できる<br> → 複数のセンサーに対するルールの作成や追加を安全に行うことができ、不正アクセス成功の可能性を低くできる - 複数のセンサーの起動・停止を行える - NIDSのアラートを管理するBASEと組み合わせが可能 下記でSnortCenterによる複数センサーの管理方法を示す ## 確認方法:TODO # HACK#103 オリジナルのSnortルールを書く ## 概要 - Snort独自のルール言語により、オリジナルのSnortルールを記述して、ネットワーク上で発生する様々な現象を検知する - 不正アクセス手法は日々多種多様化していくので、オリジナルのSnortルールを追加していかないと検知できない ## 背景 NIDSのSnortは、独自のルールエンジンとルール言語を持っている ルールエンジンは、ネットワーク上で発生する様々な現象を検知するために様々な機能(検査されるパケットおよびパケット関連値をシステムがどのように評価するかを決定するなど)を備えている ルール言語は、ルールエンジンの機能を操作するために記述する ルールを適切に設定して、検知できるネットワーク上の減少を増やしていく ## 前提知識 ### Snortルールの概要 - ルールヘッダとルールボディから構成 - ルールヘッダ:ルールにマッチした際のアクション(ルールアクション)、ルールを適用するプロトコル、送信元・宛先のIPアドレス・ポートを記述 - ルールボディ:ルールに関連付けるメッセージやSnortの検査モジュールを呼び出すための細かいオプション(ルールオプション)を記述 <pre> ルールヘッダ(ルールボディ) </pre> ### Snortルールのフォーマット Snortルールは下記のようなフォーマットで記述される <pre> action proto src_ip src_port direction dst_ip dst_port (options) </pre> #### ルールアクション(action) | ルールアクション | 概要 | | --- | --- | | log | ルールにマッチしたパケットログを記録 | | alert | 設定ファイルやコマンドラインで指定した方法で管理者に通知したうえでパケットを記録 | | pass | ルールにマッチしたパケットを無視 | | active,dynamic | 2つを組み合わせることでSnortのルールを動的に変更 | #### プロトコル(prot) - 検査対象とするプロトコルを記述する - Snortルールがサポートしているのは、ip、icmp、tcp、udp #### IPアドレス(src_ip,dst_ip) - src_ip:パケットの送信元IPアドレス(範囲、リストでも指定可能) - dst_ip:パケットの宛先IPアドレス(範囲、リストでも指定可能) #### ポート番号(src_port,dst_port) - src_port:パケットの送信元ポート番号(:区切りで範囲指定も可能) - dst_port:パケットの宛先ポート番号(:区切りで範囲指定も可能) - 特定のポート番号を指定しない場合は、「any」を記述する #### 通信の方向(direction) - 初期のSnortでは「->」、「<-」が利用可能であったが、現在は「<-」が廃止されている - 上記に合わせて、双方向の通信を意味する「<>」の2種類を指定できる #### ルールオプション - Snortには下記の例のような多くのルールオプションが存在する | ルールオプション | 概要 | | --- | --- | | msg | パケットがルールにマッチした場合にメッセージを出力する<br>msg:"出力するメッセージ" | | content | パケット内を16進の値や文字列で検索する<br>(文字列の検索)content:"検索する文字列"<br>(16進の値の検索)content:"\|16進の値\|"<br>※検索する文字列の前に「!」をつけると該当文字列を含まないものを検索可能<br>※16進の値の1例として、0x90はバッファオーバーフローを引き起こす不正アクセスコードの検出によく用いられる | | nocase | contentオプションによる文字列検索で、大文字・小文字を区別する場合にcontentオプションと共に指定する | | offset,depth | contentオプションでマッチングを開始する値と終了する値を指定する | | dsize | パケットのペイロードサイズを指定する<br>dsize:ペイロードサイズ(の範囲)<br>※範囲指定には「<>」が使用可能<br>※ペイロード:パケットのヘッダ部分を除いた送信したいデータそのもの | | flags | TCPフラグを検査して、ポートスキャンなどを検出する<br>flags: フラグ,予備フラグ<br>フラグにはS(SYN)、F(FIN)、R(RST)、P(PSH)、A(ACK)、U(URG)を指定可能<br>予備フラグには1、2、0(フラグがセットされていないパケットにマッチさせる)が指定可能 | | flag | flagsオプションより複雑なフラグの条件を記述可能 | ### Snortルールエンジンの機能 オリジナルルールにはノイズが存在し、それによって頻繁にアラートが上がってくる それらをSnortルールエンジンの機能で抑制する #### Threshold - アラート出力に必要な特定のIPアドレスに対するマッチの最低回数を指定する - 指定した時間範囲内で出力するアラートを制限する - 2種類の使用方法がある - シグネチャIDによる制御:シグネチャIDでルールを分類してしきい値を与える - ルールオプションによる制御:しきい値をルール内に直接記述する #### Suppression - ルールをコメントアウトしなくとも特定のIPアドレス(アラート)に対する出力を抑制する 下記で実際にオリジナルのSnortルールを設定する方法を解説する ## 確認方法:TODO # HACK#107 分散ステルスセンサーネットワークの構築 ## 概要 - IDSをステルス化して、IDS自身が不正アクセスを受けるのを防ぐ - IDS自身が不正アクセスを受けると、不正アクセスを検知できなくなって危険性が増大する可能性がある ## 背景 IDSは不正アクセスを検出すると、アラートを出して、攻撃者の振る舞いを記録してくれるので、攻撃者を追跡する貴重な証拠となる 上記のようにIDSの情報は慎重に取り扱わなければならないため、IDS自身が不正アクセスを受けることがあってはならない しかし、IDSが通常のネットワーク上にあると、その可能性を低くできない そこで、IDSを通常のネットワークから切り離し(ステルス化)てIDS自身への不正アクセスを防止する ## 前提知識 ### IDSのステルス化 - IDSの監視用ネットワークインタフェース(プロミスキャスモード)をIPアドレスを与えないで有効化する - 上記によって、監視用ネットワークインタフェースを経由したIDSへのアクセスが不可能になる 下記でIDSの監視用ネットワークインタフェースをステルス化する具体的な方法を解説する ## 確認方法:TODO

    Import from clipboard

    Paste your markdown or webpage here...

    Advanced permission required

    Your current role can only read. Ask the system administrator to acquire write and comment permission.

    This team is disabled

    Sorry, this team is disabled. You can't edit this note.

    This note is locked

    Sorry, only owner can edit this note.

    Reach the limit

    Sorry, you've reached the max length this note can be.
    Please reduce the content or divide it to more notes, thank you!

    Import from Gist

    Import from Snippet

    or

    Export to Snippet

    Are you sure?

    Do you really want to delete this note?
    All users will lose their connection.

    Create a note from template

    Create a note from template

    Oops...
    This template has been removed or transferred.
    Upgrade
    All
    • All
    • Team
    No template.

    Create a template

    Upgrade

    Delete template

    Do you really want to delete this template?
    Turn this template into a regular note and keep its content, versions, and comments.

    This page need refresh

    You have an incompatible client version.
    Refresh to update.
    New version available!
    See releases notes here
    Refresh to enjoy new features.
    Your user state has changed.
    Refresh to load new user state.

    Sign in

    Forgot password

    or

    By clicking below, you agree to our terms of service.

    Sign in via Facebook Sign in via Twitter Sign in via GitHub Sign in via Dropbox Sign in with Wallet
    Wallet ( )
    Connect another wallet

    New to HackMD? Sign up

    Help

    • English
    • 中文
    • Français
    • Deutsch
    • 日本語
    • Español
    • Català
    • Ελληνικά
    • Português
    • italiano
    • Türkçe
    • Русский
    • Nederlands
    • hrvatski jezik
    • język polski
    • Українська
    • हिन्दी
    • svenska
    • Esperanto
    • dansk

    Documents

    Help & Tutorial

    How to use Book mode

    Slide Example

    API Docs

    Edit in VSCode

    Install browser extension

    Contacts

    Feedback

    Discord

    Send us email

    Resources

    Releases

    Pricing

    Blog

    Policy

    Terms

    Privacy

    Cheatsheet

    Syntax Example Reference
    # Header Header 基本排版
    - Unordered List
    • Unordered List
    1. Ordered List
    1. Ordered List
    - [ ] Todo List
    • Todo List
    > Blockquote
    Blockquote
    **Bold font** Bold font
    *Italics font* Italics font
    ~~Strikethrough~~ Strikethrough
    19^th^ 19th
    H~2~O H2O
    ++Inserted text++ Inserted text
    ==Marked text== Marked text
    [link text](https:// "title") Link
    ![image alt](https:// "title") Image
    `Code` Code 在筆記中貼入程式碼
    ```javascript
    var i = 0;
    ```
    var i = 0;
    :smile: :smile: Emoji list
    {%youtube youtube_id %} Externals
    $L^aT_eX$ LaTeX
    :::info
    This is a alert area.
    :::

    This is a alert area.

    Versions and GitHub Sync
    Get Full History Access

    • Edit version name
    • Delete

    revision author avatar     named on  

    More Less

    Note content is identical to the latest version.
    Compare
      Choose a version
      No search result
      Version not found
    Sign in to link this note to GitHub
    Learn more
    This note is not linked with GitHub
     

    Feedback

    Submission failed, please try again

    Thanks for your support.

    On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?

    Please give us some advice and help us improve HackMD.

     

    Thanks for your feedback

    Remove version name

    Do you want to remove this version name and description?

    Transfer ownership

    Transfer to
      Warning: is a public team. If you transfer note to this team, everyone on the web can find and read this note.

        Link with GitHub

        Please authorize HackMD on GitHub
        • Please sign in to GitHub and install the HackMD app on your GitHub repo.
        • HackMD links with GitHub through a GitHub App. You can choose which repo to install our App.
        Learn more  Sign in to GitHub

        Push the note to GitHub Push to GitHub Pull a file from GitHub

          Authorize again
         

        Choose which file to push to

        Select repo
        Refresh Authorize more repos
        Select branch
        Select file
        Select branch
        Choose version(s) to push
        • Save a new version and push
        • Choose from existing versions
        Include title and tags
        Available push count

        Pull from GitHub

         
        File from GitHub
        File from HackMD

        GitHub Link Settings

        File linked

        Linked by
        File path
        Last synced branch
        Available push count

        Danger Zone

        Unlink
        You will no longer receive notification when GitHub file changes after unlink.

        Syncing

        Push failed

        Push successfully