Xuan Jing Zhou Xing が「クラウド ネイティブでの IAST 実装の実践」について説明します。

Xuan Jing Zhou Xing が「クラウド ネイティブでの IAST 実装の実践」について説明します。

クラウドネイティブテクノロジーは近年注目されており、ビジネスの革新と発展の重要な原動力となっています。クラウドネイティブ業界の規模が拡大し続けるにつれて、クラウド アプリケーションはライフサイクル全体のあらゆる段階でさまざまなセキュリティ上の課題に直面します。企業は、安全なアーキテクチャに基づいて DevOps プロセスとツールを設計する必要があります。

まとめ

  • クラウドネイティブの概要
  • クラウドネイティブアプリケーションセキュリティ
  • IASTについて
  • コンテナ化とマイクロサービスを組み合わせたIAST
  • IASTとDevOpsパイプラインの組み合わせ
  • 思考と展望

写真: Xuanjing Securityのパートナーであり、中国東部の技術オペレーション責任者であるZhou Xing氏

01 クラウドネイティブの概要

Cloud Native Computing Foundation (CNCF) による定義:

  • 「クラウド ネイティブ テクノロジーにより、組織はパブリック クラウド、プライベート クラウド、ハイブリッド クラウドなどの新しい動的環境で、弾力的にスケーラブルなアプリケーションを構築および実行できるようになります。
  • 代表的なクラウドネイティブ テクノロジーには、コンテナー、サービス メッシュ、マイクロサービス、不変インフラストラクチャ、宣言型 API などがあります。現在、コンテナとマイクロサービスが最も一般的に使用されていると考えられます。
  • クラウド ネイティブでは、テクノロジに対していくつかの要件も提示されます。フォールト トレラントで、管理しやすく、監視しやすい疎結合システムを構築するには、これらのテクノロジが必要です。
  • クラウド ネイティブを既存の信頼性の高い自動化方法と組み合わせて、エンジニアがシステムに頻繁かつ予測可能な大きな変更を簡単に加えられるようにする必要があります。

クラウドネイティブ アプリケーションの 3 つの主な特徴:

まず、コンテナ化包装です。クラウド ホストや仮想ホスト上で実行されていた従来のアプリケーションとは異なり、コンテナ化の推進により、アプリケーションをコンテナに基づいてコンテナ内で実行できるようになりました。同時に、アプリケーション展開の独立した単位としてマイクロサービスと組み合わせることもできます。

2番目は、動的管理です。動的な管理とスケジューリングは、一般的な K8s などの集中型オーケストレーションおよびスケジューリング システムを通じて実現されます。

3番目は、マイクロサービス指向です。サービス間の依存関係を明確にし、サービスを相互に分離します。従来は、フロントエンドアプリケーションとバックエンドサービスを組み合わせて対応する機能を提供していました。たとえば、ページをクリックすると、リクエストから応答までのすべての機能がバックエンド アプリケーションに統合されます。現在、マイクロサービスは、元の機能をモジュールに分割してマイクロサービス モデルを形成するために使用されます。

クラウド ネイティブ アプリケーションの 3 つの特性を実現するには、クラウド ネイティブ アプリケーションに次の 4 つの機能が必要です。

まず第一に、マイクロサービスを提供できる必要があります。アプリケーションは RESTful API を介して相互に通信する必要があります。機能とモジュールに分割した後、元のアプリケーションを分離して、サービスをさらに分離し、結合性を高める必要があります。

2 番目に、以前の単一または少数のアプリケーションのリリースと比較して、現在は N 個のモジュール式マイクロサービス アプリケーションがリリースされており、統合用の自動化ツールの導入が必要です。 DevOps または CI/CD ツールを本番環境に迅速に導入できるため、開発と運用を連携させることができます。

3 つ目は、アプリケーションを分割した後、各モジュールの機能のリリース頻度が高くなるため、頻繁なリリース、迅速なデリバリー、迅速なフィードバックに対応し、リリースリスクを軽減するために継続的デリバリー機能が必要になります。

最後に、マイクロサービスにはキャリアが必要ですが、最適なキャリアはコンテナ化です。

02 クラウドネイティブにおけるアプリケーションセキュリティ

クラウド ネイティブにおける 4 つの主要なアプリケーション セキュリティ リスク:

まず、APIです。従来のアプリケーションでは、Web リクエスト -> レスポンスを使用します。ページをクリックすると、対応するコンテンツがバックエンドの応答を通じて直接返されます。現在、私たちはクラウドネイティブのマイクロサービスに移行しており、API はリクエスト -> レスポンスに重点を置いています。マイクロサービス アーキテクチャとクラウド ネイティブ アプリケーションはどちらも従来のアプリケーションから派生したものであるため、従来のアプリケーションのセキュリティ リスクを伴います。同時に、API の性質の変化により、対応するリスクももたらされます。

2番目は、DevOpsです。自動化ツール CI/CD または DevOps の導入により、アプリケーションのリリース プロセスが加速されました。その結果、セキュリティ担当者と開発者が問題を発見して修正する時間が減ります。

3番目はマイクロサービスです。アプリケーションがコンテナ化されたマイクロサービスに変換されると、サービスの数は劇的に増加します。外部に提供されるアプリケーションは同じままですが、変革後はアプリケーションマイクロサービスの数が「1対N」になり、セキュリティ品質管理は1つのアプリケーションのセキュリティ問題から複数のマイクロサービスの問題に変わります。

4番目は、人的要因です。従来のアプリケーションであっても、分割されモジュール化されたアプリケーションであっても、人的要因はアプリケーションのセキュリティに影響を与える重要な要素です。特に、従来のアプリケーションがマイクロサービスに分割されると、各モジュールは開発のために異なる開発チームに引き渡され、最終的に異なるモジュールが 1 つのアプリケーションにカプセル化されます。しかし、各モジュール機能のセキュリティコーディング標準や開発者のセキュリティ意識は統一されていません。セキュリティチームの観点からは、各モジュールのセキュリティプログラミング品質を標準化する必要があります。

企業がアプリケーションをクラウド ネイティブに移行すると、次の 4 つの問題にも直面します。

まず、警備員の比率の問題です。現在、企業では、セキュリティ担当者と開発者の比率が比較的低くなっています。クラウドネイティブ アプリケーションの進歩に伴い、セキュリティ担当者に対するプレッシャーがますます顕著になってきています。これまでは少数のアプリケーションのセキュリティ問題のみを保守・管理する必要がありましたが、アプリケーションがさまざまなモジュールに分割されたことで、セキュリティ作業の保守・管理が分散化されました。同時に、全体的な納品の加速により、セキュリティ担当者へのプレッシャーは倍増しました。

2 つ目は、アプリケーション開発の品質の問題です。現在、企業の開発チームは、自社チームと外注チームから構成されるのが一般的です。同社は、セキュリティトレーニングを通じてチームのセキュリティ能力を強化したいと考えています。しかし、アウトソーシングした人材の離職率が高いため、セキュリティ能力のトレーニングを固定化できず、セキュリティ開発のレベルにばらつきが生じ、納品ごとのセキュリティ品質を保証できないという問題がありました。

3番目は、効果的なセキュリティツールの問題です。現在、ほとんどの企業には効果的なセキュリティ ツールの完全なセットが欠けています。従来アプリケーションをベースに使用されてきたセキュリティツールは、クラウドネイティブ下の DevOps プロセスに適合させることが難しく、マイクロサービスやクラウドネイティブ下で分散された新しいフレームワークの検出機能には限界があります。

4番目は、安全性コンプライアンスの問題です。上級規制当局による審査や、「サイバーセキュリティ法」、「重要情報インフラのセキュリティ保護に関する規則」、「個人情報保護法」、「データセキュリティ法」など一連の関連法規制の最近の公布・施行により、アプリケーションのセキュリティに対する要求がさらに高まっています。

現在のアプリケーションの状況と直面しているセキュリティ リスクに基づいて、企業はセキュリティ ツールを選択する際に主に次の 4 つの問題の解決を検討する必要があります。

まず、開発プロセスにシームレスに組み込みます。既存のセキュリティは開発に役立つように設計されています。企業がすでに DevOps プロセスまたは CI/CD ツールを導入している場合は、セキュリティ対策とツールをクラウドネイティブ アプリケーションの DevOps 開発モデルに適合させることができるはずです。

第二に、コンテナ化、マイクロサービス、分散の進歩に伴い、セキュリティ ツールはクラウド ネイティブ フレームワークの下で API、マイクロサービス、分散アーキテクチャに対応し、検出できる必要があります。

3 つ目は、検出がより高速で、より目立たないことです。 DevOps とマイクロサービスの進歩に伴い、既存のアプリケーション リリース プロセスへの干渉を避けるために、検出ツールをより高速化し、人間の関与を減らすことが求められています。

最後に、アプリケーションの反復サイクルが短縮され、セキュリティ ツールの検出結果がより有益になります。脆弱性が発生した場合、開発者がそれを修正するために残された時間は非常に限られているため、ツールによって提供されるセキュリティ検出結果が開発者にとって有益であり、より短時間で問題を特定して修正するのに役立つことが必要です。

03 IASTの紹介

IAST (インタラクティブ アプリケーション セキュリティ テスト ツール) は、企業がクラウド ネイティブに移行する過程でセキュリティ ツールを選択する問題を解決するのに役立ちます。従来の AST ツールには、SAST (ホワイト ボックス) と DAST (ブラック ボックス) が含まれます。 IAST (グレー ボックスとも呼ばれる) は、ガートナーが提案する新世代のインタラクティブ アプリケーション セキュリティ テスト ソリューションです。

IAST ツールは、エージェント プローブ、トラフィック エージェント/仮想プライベート ネットワーク、またはホスト システム ソフトウェアをサーバー側に展開することで、Web アプリケーションの実行中に機能の実行とデータ転送を収集および監視し、スキャナー側とリアルタイムで対話することで、セキュリティ上の欠陥を効率的かつ正確に特定できます。検出される脆弱性は、主流の OWASP Top 10 および CWE Top 25 の脆弱性をカバーします。同時に、脆弱性が存在するコード ファイル、行番号、関数、パラメータも正確に特定できます。簡単に言えば、IAST は、コード行を見つけるためのホワイト ボックス検出機能と、トラフィックに関するタイムリーなフィードバックを提供するためのブラック ボックス検出機能を組み合わせています。

Xuanjing Security は、IAST の実践において、アプリケーション シナリオを完全にカバーするためには、言語自体に基づいたアクティブおよびパッシブ インストルメンテーション検出モードのサポートに加えて、リアルタイム Web ログ分析を含むトラフィック検出モードもサポートする必要があると考えます。

IAST の使用は主にソフトウェア開発のテスト段階に集中しています。図に示されている完全なソフトウェア開発プロセスには、要件の確立、コーディングの開発、コードの取得、Jenkins などの自動統合ツールとの組み合わせ、自動テストの実行、プレリリース環境への送信、そしてオンラインでのリリースが含まれます。テストフェーズで IAST ツールを導入すると、この段階で機能テストを完了できます。これらの機能テストを完了すると同時に、セキュリティ テストも完了します。プロセス全体を通じて追加の人員の参加は必要ありません。

IAST ツールは、2 つのコア機能により、機能テストを完了しながらセキュリティ テストを完了できます。

IAST のコア機能の 1 つ: アクティブ モード。アクティブ モードは「インタラクティブな欠陥特定」とも呼ばれますが、「インタラクティブ」なオブジェクトとは何でしょうか。図(上図の左側)を例にとると、「スキャン制御終了」がわかります。このプロセスでは、クリックまたは訪問があった場合に、Web 側がリクエスト トラフィックを受信できます。このとき、IAST ツールはミドルウェアと統合され、対応するトラフィックを受信します。これらのトラフィックを予備的にスクリーニングした後、フィルタリングされたトラフィックはスキャン制御側に送信され、スキャン制御側はペイロードと組み合わせてデータ トラフィックを再生します。リプレイ検証プロセスでは、リクエストとレスポンス、および関数コードの実行フローに基づいて、セキュリティ上の脆弱性があるかどうかを判断できます。

IAST ツールのアクティブ モードは脆弱性の再現をサポートします。ただし、IAST 計測エージェントがトラフィックを収集してスキャン制御エンドにフィードバックした後、再生プロセス中に、署名、暗号化インターフェイス、有効期間が短いインターフェイスなどの一部のインターフェイスが失敗し、対応する検証を実行できなくなる可能性があります。利点は、検証をペイロードと組み合わせて成功すれば、セキュリティの脆弱性をほぼ 100% 特定できることです。

IAST のもう一つのコア機能は、主に動的汚染分析技術を導入するパッシブ モードです。動的汚染分析は、汚染入力、汚染伝送、汚染集約の 3 つの段階に分かれています。リクエストフローが入力されると、変数は汚染されます。変数が汚染マークを持ち、関数全体を通過する場合、どの関数を通過したかを観察できます。プロセス全体が汚染伝播プロセスです。

ライブラリまたはファイルへの書き込み操作を実行するときに、汚染集約ポイントによって保持される汚染マークを観察することにより、コード実行フローがトラフィック要求および応答と組み合わされて最終的な集約分析が行われ、プロセス全体にセキュリティ上の脆弱性があるかどうかが調べられます。

このように、プロセス全体にスキャン制御の終了がなく、クリックから応答までのプロセスが非常に短く、知らないうちに完全なセキュリティチェックが行われていることがわかります。動的汚染分析ではデータの再生が不要であるため、ダーティデータは存在せず、API インターフェース、署名および暗号化インターフェースの処理効率と処理メカニズムが非常に優れています。第三者を介さずに、元のリクエスト元を直接利用して、フローから関数実行プロセス全体まで、セキュリティ上の脆弱性がないかを直接監視できます。

04 コンテナ化とマイクロサービスを組み合わせたIAST

IAST をコンテナ化およびマイクロサービスと組み合わせるにはどうすればよいでしょうか?まず、従来のアプリケーションから現在のマイクロサービス アーキテクチャにいくつかの変更がありました。以前は、フロントエンドとバックエンドが連携し、バックエンドの統合アプリケーションがすべてのサービスを提供していました。アクセスが要求されると、バックエンドが応答し、表示ページに戻ってプロセスを完了します。マイクロサービス フレームワークでは、コンテナ化と組み合わせて機能モジュールを分割できます。分割後、バックエンドは複数のマイクロサービス プログラムを通じて機能のモジュール化を実行できます。

従来のアプリケーションでは、.java または .class ファイルを JVM 経由で直接実行することはできませんが、クラス ファイルはクラス ローダー経由でロードされた後に実行できます。上記の図を例にとると、JAR パッケージは JAVA-jar app.jar を通じて実行できます。これに基づいて、クラス ローダーの前に、プログラムはクラス内のコンテンツをインターセプトして変更することで追跡ロジックを実行できるようになります。これがスタブの基本原則です。インストルメンテーション メソッドを導入するには、パラメータに javaagent agent.jar を追加するだけです。

バイトコード インストルメンテーション テクノロジーにより、IAST をコンテナー マイクロサービス シナリオと組み合わせることができます。 SpringBoot の使用シナリオを例にとると (上図)、モジュール型アプリケーションは SpringBoot を通じてパッケージ化され、コンテナーと組み合わせてオンラインでデプロイできます。インストルメント化されたエージェントが利用可能な場合、agent.jar はミドルウェアに依存します。パッケージ化後、各コンテナには元のモジュール式マイクロサービス アプリケーションとインストルメント化されたエージェントが含まれます。

外から見ると、まだアプリケーションのように見えますが、マイクロサービス フレームワークの下にはさまざまなマイクロサービス プログラムが存在します。しかし、全体的な観点から見ると、エージェントによって収集されたさまざまなトラフィックは同じアプリケーションにフィードバックされます。したがって、Xuanjing Lingmai IAST は、マイクロサービスで収集されたさまざまなセキュリティ脆弱性を同じアプリケーションに関連付け、アプリケーションの次元から全体的なセキュリティ脆弱性の状態を確認します。

インストルメンテーションが完了してパッケージ化された後、アプリケーションの起動時にインストルメンテーション エージェントが開始され、トラフィックの入力を静かに待機します。機能テストが開始されると、インストルメント化されたエージェントはテストフェーズ中にセキュリティの脆弱性を継続的に観察および検出します。

05 IASTとDevOpsパイプラインの統合

DevOps は左から右へのパイプライン方式で実行され、テストフェーズでは主に IAST ツールが使用されます。インストルメンテーションされたエージェントが環境と組み合わせてテスト環境にデプロイされ、API テストまたは手動テストが完了すると、IAST はインストルメンテーションまたは API ドッキングによって DevOps パイプラインに接続されます。このように、機能テストが完了すると、IAST 検出の結果もパイプラインで同期して表示できます。

さらに、DevOps パイプラインは大部分が自動化されているため、IAST ツールはセキュリティしきい値または品質しきい値を設定できます。パイプラインのテスト フェーズを完了すると、セキュリティ チームは、脆弱性の数、脆弱性の種類、および IAST によって返された中リスクと高リスクの脆弱性の全体的な割合に基づいて、DevOps パイプラインを運用前環境にリリースできるかどうかを判断できます。

脆弱性検出に IAST ツールを使用する利点は、検出時間が長く、誤検出率が高い従来のセキュリティ ツールと比較して、DevOps パイプラインと組み合わせた IAST の検出モデルにより、アプリケーションがオンラインになる前に脆弱性を迅速に特定して修復できることです。

IAST を DevOps プロセスに組み込むと、主に 4 つの利点があります。

まず、プロセス全体が自動化され、セキュリティ プラグインが DevOps プロセスにシームレスに組み込まれます。

次に、トラフィックが同期的に収集され、コード ラインが正確に配置されるため、R&D と修復がガイドされます。

3 つ目は、セキュリティの品質チェックポイントで極めて厳しいセキュリティ品質しきい値を設定し、組み立てラインを直接ブロックして、セキュリティの脆弱性がオンライン段階に流入するのを減らします。テストフェーズ中にパイプラインが事前に設定された品質チェックポイントを満たしていないことが検出された場合、検出レポートが開発者に返され、開発者はレポートに基づいて問題を迅速に特定して修復します。

4番目に、セキュリティ開発ツールチェーンを改善します。 IAST は DevOps パイプラインのリンクです。サードパーティのコンポーネント検出、コンテナ セキュリティ検出などのパイプライン上の他の種類のツールと組み合わせて、完全なセキュリティ開発プロセス システムを共同で構築できます。

06 考察と展望

クラウド ネイティブの進歩とアプリケーションのマイクロサービスへの段階的な移行により、IAST インタラクティブ アプリケーション セキュリティ テスト ツールに対する要件がさらに高まっています。

まず、複数の言語と複数のシナリオをカバーします。現在、ほとんどの企業では開発言語として Java を使用していますが、バックエンドでは Python、PHP、.net などが残されることも否定できません。したがって、IAST ツールは Java に加えて、主流の言語のカバレッジを改善する必要があります。同時に、完全なシナリオのサポートも実現する必要があります。言語ベースの計測検出モードに加えて、より多くのビジネス シナリオをカバーするために、トラフィックやその他の検出方法もサポートする必要があります。

第二に、コンテナ化、マイクロサービス、分散技術の進歩に伴い、IAST のプラグイン原則に基づいて、セキュリティの脆弱性をテストするだけでなく、マイクロサービス フレームワークの下で API インターフェイスを深く探索する機能も備えている必要があります。たとえば、アプリケーションがマイクロサービス アーキテクチャを採用している場合、テスターは API インターフェイスが不完全であることに気付くことがあります。インストルメンテーションの原則に基づいて、API インターフェースをマイニングおよび分析し、セキュリティまたは機能 API カバレッジをテストして、テスター、開発者、セキュリティ担当者に提供することができます。

最後に、クラウド ネイティブでの統合プローブです。 WAF(Webアプリケーションファイアウォール)などの従来のクラウドネイティブセキュリティツールのルール設定では、現在の変化する環境や脆弱性に適応できなくなったため、RASPセキュリティソリューションを導入することができます。バージョンが頻繁にリリースされる場合、テスト段階で IAST プラグイン プローブを使用してセキュリティの脆弱性を検出します。アプリケーションのセキュリティを確保するという前提の下、短期間で修正できないセキュリティの脆弱性はオンライン段階に移行されます。テスト段階のプラグインプローブをオンライン段階に持ち込むことで、RASP 機能を有効にし、オンライン後の段階でセキュリティ保護を実行し、ランタイム自己保護メカニズムを実現できます。

吊り下げミラーの安全性について

DevSecOps アジャイル セキュリティのリーダー、Xuanjing Security。北京大学のサイバーセキュリティ技術研究チーム「XMIRROR」によって設立され、AI技術によるアジャイルセキュリティの強化に取り組んでおり、DevSecOpsソフトウェアサプライチェーンにおける持続的な脅威の統合的な検出と防御に重点を置いています。コアとなる DevSecOps インテリジェント適応型脅威管理ソリューションには、脅威モデリング、オープンソースガバナンス、リスク検出、脅威シミュレーション、ディープラーニング技術に基づく検出と対応、実際の戦闘攻撃と防御の対決を特徴とする政府および企業のセキュリティサービスなど、複数の次元における独立した革新的な製品が含まれています。金融、エネルギー、汎インターネット、IoT、クラウド サービス、自動車製造などの業界のユーザー向けに、革新的で柔軟性の高いインテリジェントな適応型セキュリティ管理ソリューションを提供します。詳細については、Xmirror Security の公式 Web サイト (www.xmirror.cn) をご覧ください。

<<:  テンセントクラウドテクノハブテクノロジーツアー北京駅はオーディオとビデオに焦点を当て、テクノロジーを使用してクラウド上の新しい「ビジュアル」の世界を開きます

>>:  オンラインオリンピック:もっと高く!もっと早く!もっと強く! 2021MAXP グローバル ハイパフォーマンス クラウド コンピューティング イノベーション コンペティションが盛大に開幕します。

推薦する

クレイジーストーン:中国初のオンラインローン詐欺事件、7億元が関与

[概要] この違法取引所は、翡翠資産パッケージを通じて株式取引を行い、投資家の預金を吸収して市場を操...

電子商取引は価格競争の悪循環に陥っている。お金を使うと死ぬし、お金を使わないともっと早く死ぬ。

電子商取引は価格戦争の悪循環に陥っている。お金を使うと死につながり、お金を使わないとより早く死につな...

起業家にとって投資家を笑わせるのは難しい。プロジェクトの90%は5分以内に議論される。

「あなた方はエンジェル投資家なのに、どうしてそんなに選り好みできるのか?」と、ある起業家は中国で最も...

hostkvm: 東京のVPSの簡単なレビュー、実際のネットワークデータを共有

Hostcatは、日本の大阪データセンターにあるhostkvmのVPSの評価データを公開しました。 ...

リンクの偽装と百度の本物と偽物のスパイダー

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っています以前、グル...

Green Radishアルゴリズムによる価値の高い内部ページ最適化は、ウェブサイトを際立たせるための基礎です。

最近のGreen Radishのアルゴリズムを考慮して、著者は自分のウェブサイトを実践して分析し、激...

基礎から応用まで、人工知能の饗宴について語りましょう

[51CTO.comからのオリジナル記事] IT業界の編集者として、私は当然あらゆるスマート製品に興...

高級電子商取引のZunxiang.comはSAIFが数千万ドルを投資した後に中止された

5月30日、SAIFパートナーズから数千万ドルの投資を受けていた高級品EC企業VIP.comが閉鎖さ...

保険の情報化の発展が加速し、クラウドコンピューティングが新たな変化をもたらす

クラウド コンピューティングは、新興技術として、パーソナル コンピュータとインターネットに続く第 3...

#30% オフ: ultravps - 年間 $10.5/kvm/512m メモリ/10g SSD/1T トラフィック/ラスベガス

fiberhub 傘下の VPS ブランド ultravps.com は、KVM 仮想化、DDR4、...

無人小売業をめぐる戦い:サプライチェーン、管理、店舗レイアウトが成功と失敗の鍵

最近、RT-MartとFeiniu.comが戦略的に投資した新しい小売プロジェクトFaDaoJiaス...

Linodeについてはどうですか? [年] Linode オーストラリア クラウド サーバーの簡単なレビューと共有

これまで、日本、シンガポール、インドにある Linode のクラウド サーバーをレビューしてきました...

bitaccel - 年間 12 ドル / 512MB RAM / 100GB HDD / 1Gbps / データ無制限

bitaccel は、サイバーマンデーに、特大ハードドライブ、1Gbps ポート、無制限のトラフィッ...

yourlasthost - 新しいダラスデータセンター、512MメモリOVZ年間支払い$18

yourlasthost は昨年インドのデータセンターにサーバーを立ち上げましたが、現在は棚から撤去...

ウェブサイトSEOにおける定量的な操作

SEO や運用管理の担当者は、管理職であれば何かしらの問題に直面することが多いため、コミュニケーショ...