SlideShare une entreprise Scribd logo
1  sur  26
Télécharger pour lire hors ligne
Secure Scheme Script
    Suite (Squad)
            ~~TOD~~

  Shibuya lisp technical talk #7


                                   1
自己紹介
• 1974年i4004を使った装置製作でプログラミングを学ぶ
• 1981年K&RのC言語を学ぶ
• 1982年前後でLisp, Prologに興味を持つが挫折する
•   :
•   :
•   :
• 2010年セキュアなプログラム開発環境が欲しくて調査、
  Lispに興味を持ちcampuslispにセキュリティを組み込
  んでみる
• 2011年Rubyにセキュリティを組み込もうとして断念し
  minischemeにセキュリティを移植する検討を始める
• そして今日、まだSchemeの全てを知らない素人!
                                2
Agenda
 技術編
      SecureなScript言語の必要性
      SchemeがSecureであるために
      ObjectへのSecurity属性とTypeの追加
      定義や設定内容を保持するために
      パスワード認証を安全に行うために
      認証後の入出力はSecureに
      リモート入出力としてのソケット通信
      セキュリティ組み込みによる制限
      New Syntax & Procedure
      既存SyntaxとProcedureの制限
 デモ
      デモの構成
      アクセスコントロール機能と権限確認方法の紹介
 ビジネス編
      Script言語のすむ世界
      Script言語を使ったアプリは何故商売に向かない?
      Script言語だから!!!
 セキュリティウォーズ
      S-quad + Backup-base ⇒ DROID   3
SecureなScript言語の必要性
• コンパイル型言語はセキュリティ機能を持つ
 • ソース無しでの解析・改ざんは困難
 • 脆弱性テストが確立している
 • セキュリティ機能組み込みは実装者に依存し強度が不定?
• Script言語はセキュリティが無い
 •   起動時に読み込ませるためソースコードが丸見え
 •   ソースコード解析・改ざんは容易
 •   使用中、勝手に関数利用や変数内容変更ができる
 •   利用者に楽しいプログラミングの世界を開放している
• 解決策はセキュリティ!
 • さて…

                                4
SchemeがSecureであるために
• 変数の値を勝手に知られたくない
    • 読み出し時には権限を確認する (Eval)
• 変数を勝手に変更されたくない
    •   書き込み時には権限を確認する (Mod)
• 関数コードを不用意に見られたくない
    • 関数読み出し時には権限を確認する (Eval)
• 関数コードを勝手に変更されたくない
    • 関数変更時には権限を確認する (Mod)
• 関数を勝手に実行されたくない
    •   関数実行時には権限を確認する (eXec)
• 権限確認用パスワードを他の人見られたくない
    • 権限を持つ人が設定できその後は自らも簡単に見れないように
•   パスワード認証後は通信も秘密にしたい
    • 暗号化通信を行う(Encrypt)
                                     5
ObjectへのSecurity属性と表記
Type、表現形式の追加
• Object Cell に評価・変更・実行用 ロックフラグを用意
  する
• Object Cell に権限確認パスワードとのリンクを張る
• パスワード用途のObjectとしてBlock Type (128
  bit) を追加する
• Block Type データを保持するBlock Segment を
  追加する
• Block Type の表記にはHexa Decimal と
  Base64を用いる
• ファイルバックアップ、相互通信にはBase64エンコード
  を利用する

                                   6
変数タイプと属性の追加(例)
    •   /* cell structure */
    •   struct cell {                      •   #define T_STRING   1      /* 0000000000000001 */
    •      unsigned short _flag;           •   #define T_NUMBER   2      /* 0000000000000010 */
    •      struct cell *_osec;             •   #define T_SYMBOL   4      /* 0000000000000100 */
    •      union {                         •   #define T_SYNTAX   8      /* 0000000000001000 */
権限鍵と•          struct {                    •   #define T_PROC     16     /* 0000000000010000 */
のリンク                                       •   #define T_PAIR     32     /* 0000000000100000 */
    •             char *_svalue;
                                           •   #define T_CLOSURE  64     /* 0000000001000000 */
    •             short _keynum;           •   #define T_CONTINUATION 128 /* 0000000010000000 */
    •          } _string;                  •   #ifdef USE_MACRO
    •          struct {                    •   #define T_MACRO    256    /* 0000000100000000 */
    •             short _nb;               •   #endif
    •             unsigned short _bver; •      #define T_PROMISE  512    /* 0000001000000000 */
 128
                                           •   #define F_EVALLOCK 1024   /* 0000010000000000 */
 Bit•             bpointer _pblock;
Block                                      •   #define F_MODLOCK 2048    /* 0000100000000000 */
    •          } _blocks;                  •   #define F_EXECLOCK 4096   /* 0001000000000000 */
    •          struct {                    •   #define T_BLOCK    8192   /* 0010000000000000 */
    •             long _ivalue;            •   #define T_ATOM     16384 /* 0100000000000000 */
    •          } _number;                  •   #define CLRATOM    49151 /* 1011111111111111 */
    •          struct {                    •   #define MARK       32768 /* 1000000000000000 */
                                           •   #define UNMARK     32767 /* 0111111111111111 */
    •             struct cell *_car;
    •             struct cell *_cdr;
    •          } _cons;                                         Security
                                                                  Flag
    •      } _object;                Block                                              7
                                     Type
    •   };
定義や設定内容を保持するために
•   Backup 機能の組み込み
    • その時点の状態をScheme式に逆変換し特定のパスワードで保護しファ
      イルに保存する
•   Resume機能の組み込み
    • Backup ファイルは起動時に自動読み込みしScheme を初期化する
•   セキュアな関数定義
    • 関数定義では使用する関数・変数が持つセキュリティ属性を確認しそれ
      らが前もって認証済みであるか確認する
•   操作権限委譲
    • 定義済みの関数はその関数が利用する関数・変数のセキュリティ属性
      かかわらず評価、実行できる
•   削除機能の追加
    • 定義済み関数・変数を未定義化する構文undef を追加
•   アクセスコントロール
    • 評価・実行時はそのSymbolのセキュリティ制限にしたがう
•   Shutdown時の考慮
                                         8
    • 終了時は内部状態を暗号化しBackupする
パスワード認証を安全に行うために

• 乱数を用いたパスワード交換
 • 乱数をパスワードで暗号化し相互に交換するアルゴリズムを用
   いて平文のパスワード交換を無くす
• モジュール分割した認証
 • パスワード保持プログラムを他のモジュールに用意しパスワード
   チャレンジに対しレスポンスを確認し認証する
• 認証リスト
 • 複数同時認証を可能とし認証済みのObject は認証リストに登
   録しObject利用時にスキャンし確認する
• 認証切り替え
 • 認証を切り替えるには今までの認証記録の消去がされ、新たに
   認証リストが作成される


                                  9
認証後の入出力はSecureに
• ローカル入出力
 • キーボードを用いた入力は利用環境をセキュアーにする前提で平
   文による入出力
• リモート入出力
 • リモート入出力のポートの組み込みで外部からの指示を受け付け
   る
 • リモートポートからのキーボード入力に対しては通信を暗号化する
 • パスワード認証時に交換する乱数をセッション鍵として利用する
 • 通信パケットにカウンターを組み込みリトライ攻撃を防止する
 • 通信入力データを復号し結果を同じセッション鍵で暗号化し返信
   する



                               10
リモート入出力としてのソケット通信
機能を組み込む
• モジュール間通信
 • ローカル入出力からソケットを介し他のモジュールと通信する機
   能を持つ
• リモート制御
 • リモートプログラムはスクリプトをソケットを介して送信し結果を受
   信する
 • 認証パスワードを保持し乱数を用いたチャレンジパケットを生成
   送信しレスポンスを解析する(外部認証)
 • 相手からのチャレンジパケットを受信し乱数を用いたレスポンス
   パケットを生成し送信する(内部認証)
 • 相互に認証が成功した以降の全ての通信は暗号化するモードと
   なる

                                 11
セキュリティ組み込みによる制限
• 暗号通信機能の追加
 • 認証後はデータをセッション鍵で暗号化しその結果を印刷可能な
   コードBase64に変換し送信する
 • 受信したコードをBase64で逆変換し、その後セッション鍵で復
   号してデータを得る
• 組み込み関数動作制限
 • セキュリティフラグが設定されているObjectの利用には認証が
   必要
 • 関数定義で組み込む関数・変数は前もって定義され認証済みで
   あること
 • 定義済み関数の利用時はその関数に組み込まれた関数・変数
   の認証を再度必要せず、定義関数に設定されたセキュリティ属
   性のみに従う


                                 12
New Syntax & Procedure 1

• backup
  • define した関数と変数も含めた最新の内部表現を外部表現に
    変換してバックアップ
• undef
  • Define した関数・変数を削除する
• setsym
  • Symbol にセキュリティフラグ(EMX)と認証鍵をセットする
• reqsym
  • セットされたObjectのセキュリティフラグ(EMX)確認
• auth1
  • 相互認証Pass 1
• auth2
  • 相互認証Pass 2
                                       13
New Syntax & Procedure 2

• ex-auth1
  • 外部モジュールとの相互認証 Pass 1 (auth1の生成送信)
• ex-auth2
  • 外部モジュールとの相互認証 Pass 2 (auth2の生成送信)
• start-minion
  • モジュールへの外部制御を許可する
• conn-minion
  • 外部モジュールに接続する
• req-minion
  • 外部モジュールとの通信
• 状態確認関数
  • auth-mode, get-minion

                                        14
既存SyntaxとProcedureへ
の制限
• define
   • 引数は定義済みであり且つセキュリティフラグを確認し認証済み
     であることが続行条件
• eval
   • 引数にTLO*が有ればそのセキュリティフラグを確認し認証済み
     であることが続行条件(Closureは除く)
• apply
   • TLO*のセキュリティフラグを確認し認証済みであることが評価
     続行の条件
• set!, set-car!, set-cdr!,
   • TLO*のセキュリティフラグを確認し認証済みであることが変更
     実行の条件

                          *TOL: Top Level Object   15
相互認証方式の例
                          _ra              _rb            0101……….80
      0101……….80



a         ENC                                                ENC       a’
                          ENC              ENC

                                 M1   M3                     ENC       b’’
b         ENC




          _key            DEC              DEC               _key



                          ENC              ENC

                                 M4   M2

認証アルゴリズム 1                                               認証アルゴリズム 2


                          DEC              DEC



    _ra == _ra1    _rb1   _ra1             _rb1   _ra1               16
                                                           _rb == _rb1
デモの構成
                          ninja


        Display

                                xxx2
                               .escm
                      Ninja2
KB       ninja                             ninja



                          ninja

               xxx1                              xxx4
              .escm                             .escm
     Ninja1                            Ninja3

                                xxx3
                               .escm               17
                      Ninja4
Demonstration

  Bug still alive




                    18
Script言語のすむ世界(私見)
• Script言語は脇役であり主役になれない
 • チョイ作りにはとても便利だがしっかり作るときはCompilerで
   高速化
 • ユーザーに機能の部分開放目的で他のソフトにバインドされる
 • Scriptその物の販売では商売にならない
• 高級言語の上に位置する上級言語
 • Compilerで組み込まれた上級言語
 • 要求仕様作成言語?
 • テスト仕様作成言語?
• 住んでいる世界は
 • SIの道具として机の中、思考訓練用途で頭の中、実行アプリの
   ポケットの中、暗いQAテスト機の中、解説書の本の中
• 将来も安泰か?
 • CompilerがVMと結託して攻めて来る
 • 自分を守れれば生きながらえると信じよう!           19
Script言語を使ったアプリは何
故商売に向かない?
• ソフトの知的財産権が守れない
 • 複製検出が出来ない
 • 勝手に機能追加できてしまう
• サポートが出来ない
 • トレーサビリティ機能を組み込む事が難しい
 • ソースコードの勝手な変更によるトラブルのサポートが出来ない
• 単一個別要求に向くので
 • 趣味の世界
 • プロトタイプモデルの開発
 • 検査機のテストスクリプト
• ビジネスにするとしたら
 • やっぱり解説書でアカデミックに!
                               20
Script言語だから!!!
•   ライブラリー化されやすく教育に便利
    • Script言語で作成した実行プログラムは可読性が高く、再利用が容易
      で、ライブラリー化され易く、先人の知恵を学べる
•   柔軟な機能修正
    • REPL構造により、組み込んだ定義を更に評価対象として修正定義出
      来る事が大きな特徴
•   柔軟性の裏返し
    • Script言語の実行プログラムが編集可能なため脆弱性が生まれてし
      まうが、実行プログラムへのアクセスコントロール機能が組み込まれると
      その弱点は消えていく
•   脆弱性対策
    • 一度組み込んだScriptが実行モジュールとして一体と成りScriptの再
      読み込みを必要としない構成であれば、Compiler言語による実行モ
      ジュールと秘匿性に対する相違が無くなりScript言語の良さが際立っ
      てくる
•   便利で安心に
    • アクセスコントロール機能の活性化をフィールドで行うなどの柔軟性が
      組み込こめるのはScript言語の特権である          21
レイヤー構造とロールの違い
              Edit           Compile
Application
Programmer                                  Applimenter
                      Test
                                                Squad
         Upload


               Applet                  Script              Application
                                                                +
                                                          Implementer
          Virtual Machine              Squad                    =
                                                          Applimenter
                     Operating System

                       Device Driver

                        Hardware
                                                                    22
Squad Applications

Sq-Scheme       Sq-Java/Scheme   Sq-Ruby   Sq-Python

    IC
   Card




                   Sq-Scheme

            Sq-Scheme

  Sq-Scheme
                                                   23
S-quad + Backup-base
⇒ DROID
• シナリオを分解し、スクリプトとしてアクターに表
  現させ、劇を完成させる静的な世界から飛び出し、
• アクターはスクリプトを読み込み租借して進化す
  る知能を持つものとし、
• ダイナミックなネットワーク構築と階層化で集団と
  して進化を可能とさせる
• Droid Epic Compile を目指す

Dynamically React-able Object by the Internet Device
                                                  24
Droid Scheme Net




                   25
ご清聴有難うございました

  門外漢の視点でした




               26

Contenu connexe

Similaire à Secure scheme script suite

130710 02
130710 02130710 02
130710 02openrtm
 
Solnik secure enclaveprocessor-pacsec-final-jp
Solnik secure enclaveprocessor-pacsec-final-jpSolnik secure enclaveprocessor-pacsec-final-jp
Solnik secure enclaveprocessor-pacsec-final-jpPacSecJP
 
図解で理解するvetKD
図解で理解するvetKD図解で理解するvetKD
図解で理解するvetKDryoo toku
 
ISUCONの勝ち方 YAPC::Asia Tokyo 2015
ISUCONの勝ち方 YAPC::Asia Tokyo 2015ISUCONの勝ち方 YAPC::Asia Tokyo 2015
ISUCONの勝ち方 YAPC::Asia Tokyo 2015Masahiro Nagano
 
コンテナセキュリティにおける権限制御(OCHaCafe5 #3 Kubernetes のセキュリティ 発表資料)
コンテナセキュリティにおける権限制御(OCHaCafe5 #3 Kubernetes のセキュリティ 発表資料)コンテナセキュリティにおける権限制御(OCHaCafe5 #3 Kubernetes のセキュリティ 発表資料)
コンテナセキュリティにおける権限制御(OCHaCafe5 #3 Kubernetes のセキュリティ 発表資料)NTT DATA Technology & Innovation
 
高速な暗号実装のためにしてきたこと
高速な暗号実装のためにしてきたこと高速な暗号実装のためにしてきたこと
高速な暗号実装のためにしてきたことMITSUNARI Shigeo
 
Abusing Interrupts for Reliable Windows Kernel Exploitation (ja)
Abusing Interrupts for Reliable Windows Kernel Exploitation (ja)Abusing Interrupts for Reliable Windows Kernel Exploitation (ja)
Abusing Interrupts for Reliable Windows Kernel Exploitation (ja)inaz2
 
Dockerセキュリティ: 今すぐ役に立つテクニックから,次世代技術まで
 Dockerセキュリティ: 今すぐ役に立つテクニックから,次世代技術まで Dockerセキュリティ: 今すぐ役に立つテクニックから,次世代技術まで
Dockerセキュリティ: 今すぐ役に立つテクニックから,次世代技術までAkihiro Suda
 
Software Development with Symfony
Software Development with SymfonySoftware Development with Symfony
Software Development with SymfonyAtsuhiro Kubo
 
[CB16] マイクロソフトウィンドウズカーネルのデスノート by Peter Hlavaty & Jin Long
[CB16] マイクロソフトウィンドウズカーネルのデスノート by Peter Hlavaty & Jin Long[CB16] マイクロソフトウィンドウズカーネルのデスノート by Peter Hlavaty & Jin Long
[CB16] マイクロソフトウィンドウズカーネルのデスノート by Peter Hlavaty & Jin LongCODE BLUE
 
130329 04
130329 04130329 04
130329 04openrtm
 
20130329 rtm4
20130329 rtm420130329 rtm4
20130329 rtm4openrtm
 
memcached + selinux engine
memcached + selinux enginememcached + selinux engine
memcached + selinux engineKohei KaiGai
 
C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1信之 岩永
 
ハードウェア脳とソフトウェア脳
ハードウェア脳とソフトウェア脳ハードウェア脳とソフトウェア脳
ハードウェア脳とソフトウェア脳Shinichiro Niiyama
 
はじめてのCodeIgniter
はじめてのCodeIgniterはじめてのCodeIgniter
はじめてのCodeIgniterYuya Matsushima
 
[db tech showcase Tokyo 2015] A26:内部犯行による漏えいを防ぐPostgreSQLの透過的暗号化機能に関する実装と利用方法...
[db tech showcase Tokyo 2015] A26:内部犯行による漏えいを防ぐPostgreSQLの透過的暗号化機能に関する実装と利用方法...[db tech showcase Tokyo 2015] A26:内部犯行による漏えいを防ぐPostgreSQLの透過的暗号化機能に関する実装と利用方法...
[db tech showcase Tokyo 2015] A26:内部犯行による漏えいを防ぐPostgreSQLの透過的暗号化機能に関する実装と利用方法...Insight Technology, Inc.
 
5分程度で分かる? Appceleratorの方のAlloy
5分程度で分かる? Appceleratorの方のAlloy5分程度で分かる? Appceleratorの方のAlloy
5分程度で分かる? Appceleratorの方のAlloyMasato Kitao
 
TDUCTFの実行基盤
TDUCTFの実行基盤TDUCTFの実行基盤
TDUCTFの実行基盤Youta Egusa
 
Hello Dark-Side C# (Part. 1)
Hello Dark-Side C# (Part. 1)Hello Dark-Side C# (Part. 1)
Hello Dark-Side C# (Part. 1)Yuto Takei
 

Similaire à Secure scheme script suite (20)

130710 02
130710 02130710 02
130710 02
 
Solnik secure enclaveprocessor-pacsec-final-jp
Solnik secure enclaveprocessor-pacsec-final-jpSolnik secure enclaveprocessor-pacsec-final-jp
Solnik secure enclaveprocessor-pacsec-final-jp
 
図解で理解するvetKD
図解で理解するvetKD図解で理解するvetKD
図解で理解するvetKD
 
ISUCONの勝ち方 YAPC::Asia Tokyo 2015
ISUCONの勝ち方 YAPC::Asia Tokyo 2015ISUCONの勝ち方 YAPC::Asia Tokyo 2015
ISUCONの勝ち方 YAPC::Asia Tokyo 2015
 
コンテナセキュリティにおける権限制御(OCHaCafe5 #3 Kubernetes のセキュリティ 発表資料)
コンテナセキュリティにおける権限制御(OCHaCafe5 #3 Kubernetes のセキュリティ 発表資料)コンテナセキュリティにおける権限制御(OCHaCafe5 #3 Kubernetes のセキュリティ 発表資料)
コンテナセキュリティにおける権限制御(OCHaCafe5 #3 Kubernetes のセキュリティ 発表資料)
 
高速な暗号実装のためにしてきたこと
高速な暗号実装のためにしてきたこと高速な暗号実装のためにしてきたこと
高速な暗号実装のためにしてきたこと
 
Abusing Interrupts for Reliable Windows Kernel Exploitation (ja)
Abusing Interrupts for Reliable Windows Kernel Exploitation (ja)Abusing Interrupts for Reliable Windows Kernel Exploitation (ja)
Abusing Interrupts for Reliable Windows Kernel Exploitation (ja)
 
Dockerセキュリティ: 今すぐ役に立つテクニックから,次世代技術まで
 Dockerセキュリティ: 今すぐ役に立つテクニックから,次世代技術まで Dockerセキュリティ: 今すぐ役に立つテクニックから,次世代技術まで
Dockerセキュリティ: 今すぐ役に立つテクニックから,次世代技術まで
 
Software Development with Symfony
Software Development with SymfonySoftware Development with Symfony
Software Development with Symfony
 
[CB16] マイクロソフトウィンドウズカーネルのデスノート by Peter Hlavaty & Jin Long
[CB16] マイクロソフトウィンドウズカーネルのデスノート by Peter Hlavaty & Jin Long[CB16] マイクロソフトウィンドウズカーネルのデスノート by Peter Hlavaty & Jin Long
[CB16] マイクロソフトウィンドウズカーネルのデスノート by Peter Hlavaty & Jin Long
 
130329 04
130329 04130329 04
130329 04
 
20130329 rtm4
20130329 rtm420130329 rtm4
20130329 rtm4
 
memcached + selinux engine
memcached + selinux enginememcached + selinux engine
memcached + selinux engine
 
C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1
 
ハードウェア脳とソフトウェア脳
ハードウェア脳とソフトウェア脳ハードウェア脳とソフトウェア脳
ハードウェア脳とソフトウェア脳
 
はじめてのCodeIgniter
はじめてのCodeIgniterはじめてのCodeIgniter
はじめてのCodeIgniter
 
[db tech showcase Tokyo 2015] A26:内部犯行による漏えいを防ぐPostgreSQLの透過的暗号化機能に関する実装と利用方法...
[db tech showcase Tokyo 2015] A26:内部犯行による漏えいを防ぐPostgreSQLの透過的暗号化機能に関する実装と利用方法...[db tech showcase Tokyo 2015] A26:内部犯行による漏えいを防ぐPostgreSQLの透過的暗号化機能に関する実装と利用方法...
[db tech showcase Tokyo 2015] A26:内部犯行による漏えいを防ぐPostgreSQLの透過的暗号化機能に関する実装と利用方法...
 
5分程度で分かる? Appceleratorの方のAlloy
5分程度で分かる? Appceleratorの方のAlloy5分程度で分かる? Appceleratorの方のAlloy
5分程度で分かる? Appceleratorの方のAlloy
 
TDUCTFの実行基盤
TDUCTFの実行基盤TDUCTFの実行基盤
TDUCTFの実行基盤
 
Hello Dark-Side C# (Part. 1)
Hello Dark-Side C# (Part. 1)Hello Dark-Side C# (Part. 1)
Hello Dark-Side C# (Part. 1)
 

Secure scheme script suite

  • 1. Secure Scheme Script Suite (Squad) ~~TOD~~ Shibuya lisp technical talk #7 1
  • 2. 自己紹介 • 1974年i4004を使った装置製作でプログラミングを学ぶ • 1981年K&RのC言語を学ぶ • 1982年前後でLisp, Prologに興味を持つが挫折する • : • : • : • 2010年セキュアなプログラム開発環境が欲しくて調査、 Lispに興味を持ちcampuslispにセキュリティを組み込 んでみる • 2011年Rubyにセキュリティを組み込もうとして断念し minischemeにセキュリティを移植する検討を始める • そして今日、まだSchemeの全てを知らない素人! 2
  • 3. Agenda 技術編 SecureなScript言語の必要性 SchemeがSecureであるために ObjectへのSecurity属性とTypeの追加 定義や設定内容を保持するために パスワード認証を安全に行うために 認証後の入出力はSecureに リモート入出力としてのソケット通信 セキュリティ組み込みによる制限 New Syntax & Procedure 既存SyntaxとProcedureの制限 デモ デモの構成 アクセスコントロール機能と権限確認方法の紹介 ビジネス編 Script言語のすむ世界 Script言語を使ったアプリは何故商売に向かない? Script言語だから!!! セキュリティウォーズ S-quad + Backup-base ⇒ DROID 3
  • 4. SecureなScript言語の必要性 • コンパイル型言語はセキュリティ機能を持つ • ソース無しでの解析・改ざんは困難 • 脆弱性テストが確立している • セキュリティ機能組み込みは実装者に依存し強度が不定? • Script言語はセキュリティが無い • 起動時に読み込ませるためソースコードが丸見え • ソースコード解析・改ざんは容易 • 使用中、勝手に関数利用や変数内容変更ができる • 利用者に楽しいプログラミングの世界を開放している • 解決策はセキュリティ! • さて… 4
  • 5. SchemeがSecureであるために • 変数の値を勝手に知られたくない • 読み出し時には権限を確認する (Eval) • 変数を勝手に変更されたくない • 書き込み時には権限を確認する (Mod) • 関数コードを不用意に見られたくない • 関数読み出し時には権限を確認する (Eval) • 関数コードを勝手に変更されたくない • 関数変更時には権限を確認する (Mod) • 関数を勝手に実行されたくない • 関数実行時には権限を確認する (eXec) • 権限確認用パスワードを他の人見られたくない • 権限を持つ人が設定できその後は自らも簡単に見れないように • パスワード認証後は通信も秘密にしたい • 暗号化通信を行う(Encrypt) 5
  • 6. ObjectへのSecurity属性と表記 Type、表現形式の追加 • Object Cell に評価・変更・実行用 ロックフラグを用意 する • Object Cell に権限確認パスワードとのリンクを張る • パスワード用途のObjectとしてBlock Type (128 bit) を追加する • Block Type データを保持するBlock Segment を 追加する • Block Type の表記にはHexa Decimal と Base64を用いる • ファイルバックアップ、相互通信にはBase64エンコード を利用する 6
  • 7. 変数タイプと属性の追加(例) • /* cell structure */ • struct cell { • #define T_STRING 1 /* 0000000000000001 */ • unsigned short _flag; • #define T_NUMBER 2 /* 0000000000000010 */ • struct cell *_osec; • #define T_SYMBOL 4 /* 0000000000000100 */ • union { • #define T_SYNTAX 8 /* 0000000000001000 */ 権限鍵と• struct { • #define T_PROC 16 /* 0000000000010000 */ のリンク • #define T_PAIR 32 /* 0000000000100000 */ • char *_svalue; • #define T_CLOSURE 64 /* 0000000001000000 */ • short _keynum; • #define T_CONTINUATION 128 /* 0000000010000000 */ • } _string; • #ifdef USE_MACRO • struct { • #define T_MACRO 256 /* 0000000100000000 */ • short _nb; • #endif • unsigned short _bver; • #define T_PROMISE 512 /* 0000001000000000 */ 128 • #define F_EVALLOCK 1024 /* 0000010000000000 */ Bit• bpointer _pblock; Block • #define F_MODLOCK 2048 /* 0000100000000000 */ • } _blocks; • #define F_EXECLOCK 4096 /* 0001000000000000 */ • struct { • #define T_BLOCK 8192 /* 0010000000000000 */ • long _ivalue; • #define T_ATOM 16384 /* 0100000000000000 */ • } _number; • #define CLRATOM 49151 /* 1011111111111111 */ • struct { • #define MARK 32768 /* 1000000000000000 */ • #define UNMARK 32767 /* 0111111111111111 */ • struct cell *_car; • struct cell *_cdr; • } _cons; Security Flag • } _object; Block 7 Type • };
  • 8. 定義や設定内容を保持するために • Backup 機能の組み込み • その時点の状態をScheme式に逆変換し特定のパスワードで保護しファ イルに保存する • Resume機能の組み込み • Backup ファイルは起動時に自動読み込みしScheme を初期化する • セキュアな関数定義 • 関数定義では使用する関数・変数が持つセキュリティ属性を確認しそれ らが前もって認証済みであるか確認する • 操作権限委譲 • 定義済みの関数はその関数が利用する関数・変数のセキュリティ属性 かかわらず評価、実行できる • 削除機能の追加 • 定義済み関数・変数を未定義化する構文undef を追加 • アクセスコントロール • 評価・実行時はそのSymbolのセキュリティ制限にしたがう • Shutdown時の考慮 8 • 終了時は内部状態を暗号化しBackupする
  • 9. パスワード認証を安全に行うために • 乱数を用いたパスワード交換 • 乱数をパスワードで暗号化し相互に交換するアルゴリズムを用 いて平文のパスワード交換を無くす • モジュール分割した認証 • パスワード保持プログラムを他のモジュールに用意しパスワード チャレンジに対しレスポンスを確認し認証する • 認証リスト • 複数同時認証を可能とし認証済みのObject は認証リストに登 録しObject利用時にスキャンし確認する • 認証切り替え • 認証を切り替えるには今までの認証記録の消去がされ、新たに 認証リストが作成される 9
  • 10. 認証後の入出力はSecureに • ローカル入出力 • キーボードを用いた入力は利用環境をセキュアーにする前提で平 文による入出力 • リモート入出力 • リモート入出力のポートの組み込みで外部からの指示を受け付け る • リモートポートからのキーボード入力に対しては通信を暗号化する • パスワード認証時に交換する乱数をセッション鍵として利用する • 通信パケットにカウンターを組み込みリトライ攻撃を防止する • 通信入力データを復号し結果を同じセッション鍵で暗号化し返信 する 10
  • 11. リモート入出力としてのソケット通信 機能を組み込む • モジュール間通信 • ローカル入出力からソケットを介し他のモジュールと通信する機 能を持つ • リモート制御 • リモートプログラムはスクリプトをソケットを介して送信し結果を受 信する • 認証パスワードを保持し乱数を用いたチャレンジパケットを生成 送信しレスポンスを解析する(外部認証) • 相手からのチャレンジパケットを受信し乱数を用いたレスポンス パケットを生成し送信する(内部認証) • 相互に認証が成功した以降の全ての通信は暗号化するモードと なる 11
  • 12. セキュリティ組み込みによる制限 • 暗号通信機能の追加 • 認証後はデータをセッション鍵で暗号化しその結果を印刷可能な コードBase64に変換し送信する • 受信したコードをBase64で逆変換し、その後セッション鍵で復 号してデータを得る • 組み込み関数動作制限 • セキュリティフラグが設定されているObjectの利用には認証が 必要 • 関数定義で組み込む関数・変数は前もって定義され認証済みで あること • 定義済み関数の利用時はその関数に組み込まれた関数・変数 の認証を再度必要せず、定義関数に設定されたセキュリティ属 性のみに従う 12
  • 13. New Syntax & Procedure 1 • backup • define した関数と変数も含めた最新の内部表現を外部表現に 変換してバックアップ • undef • Define した関数・変数を削除する • setsym • Symbol にセキュリティフラグ(EMX)と認証鍵をセットする • reqsym • セットされたObjectのセキュリティフラグ(EMX)確認 • auth1 • 相互認証Pass 1 • auth2 • 相互認証Pass 2 13
  • 14. New Syntax & Procedure 2 • ex-auth1 • 外部モジュールとの相互認証 Pass 1 (auth1の生成送信) • ex-auth2 • 外部モジュールとの相互認証 Pass 2 (auth2の生成送信) • start-minion • モジュールへの外部制御を許可する • conn-minion • 外部モジュールに接続する • req-minion • 外部モジュールとの通信 • 状態確認関数 • auth-mode, get-minion 14
  • 15. 既存SyntaxとProcedureへ の制限 • define • 引数は定義済みであり且つセキュリティフラグを確認し認証済み であることが続行条件 • eval • 引数にTLO*が有ればそのセキュリティフラグを確認し認証済み であることが続行条件(Closureは除く) • apply • TLO*のセキュリティフラグを確認し認証済みであることが評価 続行の条件 • set!, set-car!, set-cdr!, • TLO*のセキュリティフラグを確認し認証済みであることが変更 実行の条件 *TOL: Top Level Object 15
  • 16. 相互認証方式の例 _ra _rb 0101……….80 0101……….80 a ENC ENC a’ ENC ENC M1 M3 ENC b’’ b ENC _key DEC DEC _key ENC ENC M4 M2 認証アルゴリズム 1 認証アルゴリズム 2 DEC DEC _ra == _ra1 _rb1 _ra1 _rb1 _ra1 16 _rb == _rb1
  • 17. デモの構成 ninja Display xxx2 .escm Ninja2 KB ninja ninja ninja xxx1 xxx4 .escm .escm Ninja1 Ninja3 xxx3 .escm 17 Ninja4
  • 18. Demonstration Bug still alive 18
  • 19. Script言語のすむ世界(私見) • Script言語は脇役であり主役になれない • チョイ作りにはとても便利だがしっかり作るときはCompilerで 高速化 • ユーザーに機能の部分開放目的で他のソフトにバインドされる • Scriptその物の販売では商売にならない • 高級言語の上に位置する上級言語 • Compilerで組み込まれた上級言語 • 要求仕様作成言語? • テスト仕様作成言語? • 住んでいる世界は • SIの道具として机の中、思考訓練用途で頭の中、実行アプリの ポケットの中、暗いQAテスト機の中、解説書の本の中 • 将来も安泰か? • CompilerがVMと結託して攻めて来る • 自分を守れれば生きながらえると信じよう! 19
  • 20. Script言語を使ったアプリは何 故商売に向かない? • ソフトの知的財産権が守れない • 複製検出が出来ない • 勝手に機能追加できてしまう • サポートが出来ない • トレーサビリティ機能を組み込む事が難しい • ソースコードの勝手な変更によるトラブルのサポートが出来ない • 単一個別要求に向くので • 趣味の世界 • プロトタイプモデルの開発 • 検査機のテストスクリプト • ビジネスにするとしたら • やっぱり解説書でアカデミックに! 20
  • 21. Script言語だから!!! • ライブラリー化されやすく教育に便利 • Script言語で作成した実行プログラムは可読性が高く、再利用が容易 で、ライブラリー化され易く、先人の知恵を学べる • 柔軟な機能修正 • REPL構造により、組み込んだ定義を更に評価対象として修正定義出 来る事が大きな特徴 • 柔軟性の裏返し • Script言語の実行プログラムが編集可能なため脆弱性が生まれてし まうが、実行プログラムへのアクセスコントロール機能が組み込まれると その弱点は消えていく • 脆弱性対策 • 一度組み込んだScriptが実行モジュールとして一体と成りScriptの再 読み込みを必要としない構成であれば、Compiler言語による実行モ ジュールと秘匿性に対する相違が無くなりScript言語の良さが際立っ てくる • 便利で安心に • アクセスコントロール機能の活性化をフィールドで行うなどの柔軟性が 組み込こめるのはScript言語の特権である 21
  • 22. レイヤー構造とロールの違い Edit Compile Application Programmer Applimenter Test Squad Upload Applet Script Application + Implementer Virtual Machine Squad = Applimenter Operating System Device Driver Hardware 22
  • 23. Squad Applications Sq-Scheme Sq-Java/Scheme Sq-Ruby Sq-Python IC Card Sq-Scheme Sq-Scheme Sq-Scheme 23
  • 24. S-quad + Backup-base ⇒ DROID • シナリオを分解し、スクリプトとしてアクターに表 現させ、劇を完成させる静的な世界から飛び出し、 • アクターはスクリプトを読み込み租借して進化す る知能を持つものとし、 • ダイナミックなネットワーク構築と階層化で集団と して進化を可能とさせる • Droid Epic Compile を目指す Dynamically React-able Object by the Internet Device 24