計測器レンタル、パソコンレンタル、分析機器レンタルのオリックス・レンテック株式会社

計測器・測定器・パソコン等IT機器のレンタル、
リース、中古機器販売、校正受託ならお任せください

IT機器玉手箱

【セキュリティ:その1】サイバー攻撃への対策は、 まず「プログラムの脆弱性」について知ることから

【セキュリティ:その1】サイバー攻撃への対策は、 まず「プログラムの脆弱性」について知ることから

(2016.01.20公開)

「プログラムの脆弱性」(セキュリティホール)とは?

 OSやアプリケーションのベンダーから、定期的に修正プログラム(パッチ)が配布されます。その際に「プログラムの脆弱性が見つかりました」、あるいは「セキュリティホールが見つかりました」というコメントが添えられていることがあります。

 この「プログラムの脆弱性」(注1)や「セキュリティホール」とは、具体的にはどういうものかご存じでしょうか?

 一言で言えば、プログラムの欠陥(バグ)です。ただし、プログラムが異常終了したり、誤った結果を出力するような欠陥ではなく、悪意のある人間がそれを利用することでサイバー攻撃が可能となる欠陥のことを指します。

 代表的な欠陥としては、「バッファオーバーフロー」(BOF)と呼ばれるものがあります。BOFについて理解すれば、プログラムの脆弱性についておおよそのことが理解できます。

※注1:単に「脆弱性」と言う場合には、コンピュータセンターに不法侵入が可能なことや、パスワードを書いた付箋をパソコンに貼り付ける従業員がいるなど、物理的・人間的な不具合も含めた広い意味になります。

バッファとは?

 まず「バッファ」とは何かを説明します。

 コンピュータ上で動作しているプログラムは、大きく以下の3つの領域をメモリ上に持っています(図1)。

1) コード領域
実行命令が格納されている領域
2) ヒープ領域
計算や操作のためのデータを格納する
3) スタック領域
プログラムの戻り先などプログラム実行のための一時的な情報が格納されている領域

 このうち、スタックとヒープを合わせた領域をバッファと言います。

図1.プログラムの3つの領域とバッファ

バッファオーバーフローとは?

 一部のプログラミング言語を除いて、必要なデータ領域をヒープ内に確保するためには、プログラムでその領域を定義することが必要になります。
 たとえばCという言語であれば、
char stringA[10];
のように定義します。これで、ヒープ上に半角10文字(10バイト)分の領域が確保されます。

ここで問題になるのは、Cなどいくつかのプログラミング言語で作成したプログラムでは、ある大きさで確保した領域に対して、それより長いデータを格納することが可能だということです。

たとえば、ある関数を使用したプログラム(注2)では、上のstringAに15バイトのデータを入力できてしまいます。これは15バイトのデータを圧縮して10バイトの領域に詰め込むということではなく、長い分の5バイトは後にあふれてしまうということです。

 このように、本来上限として想定していた長さよりも長いデータが入力されて、確保していた領域からあふれてしまうことを「バッファオーバーフロー」(BOF)と言います。

※(注2)たとえば、gets()という文字入力用の関数を使用したプログラムでは、このような入力が可能となってしまいます。なお、現在ではgets()などセキリュティ上問題のある関数は標準ライブラリから削除されています。

スタック領域にはプログラムの戻り先が格納される

図2.プログラム呼び出しのしくみ

 スタック領域には「プログラムの戻り先」が格納されています(注3)。
 プログラムは、OSから順次呼び出されるようになっており、終了したら呼び出し元に戻ることになりますが、戻り先は呼び出し元のプログラムが指定します。呼び出されたプログラムは、初期処理として指定された戻り先をスタック領域にコピーします。(図2)。
 なお、これら一連の処理はコンパイラ(注4)が自動的に作成してくれるため、プログラマが意識する必要はありません。

※(注3)戻り先アドレス以外にも、親プログラムが子プログラムを呼び出したときの状態を保存するためのデータなども格納されます。
※(注4)人間が書いたプログラム(ソースコード)をコンピュータが理解できる機械語に変換するプログラム

BOFはなぜ「脆弱性」になるのか?

 一部のOS(オペレーティングシステム)では、スタック専用のメモリ領域があり、その保護レベルを高くしているものもありますが、Windowsなど多くのOSでは、そのような保護をしていません。

 スタックやヒープは概念上の区別であり、物理的には連続したメモリ上に存在します。したがって、ヒープ領域でBOFが発生した場合、それがスタック領域に及ぶことがあります。

 この性質を利用して、戻り先アドレスを悪意のあるプログラム(ウイルスなど)のアドレスに書き換えることができます(図3)。

 すでに侵入に成功して潜伏しているマルウェアのアドレスを戻り先にされると、子プログラムは終了時にマルウェアを起動してしまい、そこからマルウェアの活動が始まってしまいます。

図3.BOFを利用したサイバー攻撃

どのようなサイバー攻撃がありうるのか?

 では、具体的にはどのようなサイバー攻撃がありうるのでしょうか。
BOFを利用したサイバー攻撃は、主に2種類あります。

 1つは、DoS(注5)(サービス妨害)攻撃やDDoS(分散DoS)攻撃の踏み台にすることです。呼び出されたマルウェアは、標的となるサーバに対して大量のデータを送信するなどして大きな負荷をかけ、特定の企業等の業務を停止させてしまいます。
 踏み台にされたパソコンやサーバを所有している企業等は、踏み台にされたことで「セキュリティが甘い企業だ」と社会的信用を失墜し、取引先を失うなどの被害を受けることがあります。

 もう1つは、管理者権限を乗っ取り、管理者にしかアクセスできない情報を盗んだり、破壊したりすることです。戻り先アドレスを書き換えられたプログラムが管理者権限を持っていると、そこから呼び出されたプログラムも管理者権限を持つようになるため、このようなことが可能になります。

※(注5)DoSとはDenial of Service attackの略で、大量のデータやメールを送りつけることでネットワーク上に存在する機器の処理負荷を高めて、業務処理ができなくなるようにするサイバー攻撃のことです。複数の攻撃元からのDoSを特にDDoS(Distributed Denial of Service)と言い、最も対応が難しいサイバー攻撃の1つと言われています。

BOFの対策は?

 BOFの対策は、プログラムの開発側と利用側で異なります。

 開発側の対策は、BOFを発生させないようにプログラムを製造することです。
 Cなどの言語であれば、入力データの長さチェックをしたり、書き込み上限バイトや境界をチェックするようなライブラリ関数を利用することです。このようなライブラリは市販されています。あるいは、BOFに関しては比較的安全と言われているJavaなどの言語で開発する方法もあります。
 また、BOFを発生する脆弱なプログラムを発見した場合は、可及的速やかに修正して、修正プログラムを配布します。

 利用側での対策は、ウイルス対策ソフトを常に最新状態にしたり、アプリケーションの修正プログラムを可能な限り速やかに適用したりすることです。
 ただ、これだけでは「ゼロデイ攻撃」と呼ばれる、セキュリティホールの発見から修正プログラムが配布されるまでの間に実行されるサイバー攻撃には対応できません。不正アクセスやサイバー攻撃が行われていないかを常時監視することも必要となってきています。

 ウイルス対策ソフトや修正プログラムのリアルタイムの更新、不正アクセスやサイバー攻撃の常時監視を人手で行うのはかなり困難な上、ミスも発生しがちです。最近では、これらの作業はもちろん、事後の対応を支援するツールもあります。貴社の求める運用レベルに合わせて、最適なツールを選択してください。

【セキュリティ:その2】踏み台を使ったサイバー攻撃とその対策(DDoS攻撃)


 オリックス・レンテックでは、以上のような問題を解決する統合脅威管理が可能なセキュリティ製品もレンタルしています。

セキュリティ・アプライアンス製品

表示されている金額以外に別途費用がかかる場合がございます。詳しくはお問い合わせください。

IT機器 レンタル

UTM(FORTINET)

レンタル料(1カ月)

27,000円(税別)

レンタル

お見積り・ご質問など、お気軽にお問い合わせください。

お電話でお問い合わせ
(営業時間 平日9:00~17:00)

0120974824
0334738437

ネットでお問い合わせ

お問い合わせフォーム

請求に関するお問い合わせ
(営業時間 平日9:00~17:00)

0367401357※恐れ入りますが、お手元に請求書など、ご請求内容が確認できる書類をご用意の上、お問い合わせください。

ページトップへ