ネット上のアクセスボリュームをUPさせ効率の良い集客をご提案します。

カテゴリー「トピックス」の記事

Let’s EncryptでSSL無料証明書を使ってみる

 / Linux Tips, Security Tips, テクニカル, トピックス, ノウハウ

世の中では7月24日のChrome68の驚異に向かってSSL化へ着実にサイトを切り替えるところが多くなっています。でもサイトを沢山持っているところはかなりのお金の負担になりますね。どうするんだろう?と思ってたらLet’s EncryptでSSL無料証明書が作れるんだね。でも3ヶ月更新のようです。

色々と今後このまま続くと思えないが当座は目下SSL化を目論んでいるGoogleにしてもこの証明書は短期的に見ればまともなサイトの救済策になるのであったほうが良い。長期的には排除か評価を低くするというシナリオは見えてくる。

使わないであれこれ言うよりは、まずは使ってみるというのは大事だね。ということで使ってみましたので、その備忘録を残したいと思います。


Let’s Encryptシステムのインストール方法

ドメインはtest.serve.netと仮定して必ずそのサイトが稼働しているサイトで作業を行う必然性があります。作業する際にそのドメインのドキュメントルート配下にもコマンド実行時に細工が入るらしいので必ず稼働しているドメインである必要があるのです。インストールする場所はどこでも良いのだけど外部ツールの導入は大体が/usr/localもしくは/optなので今回は/optで行ってみたいと思います。

ドキュメントルートに処理と認証を行い、対象ドメイン用の証明書群を作る。

証明書は/etc/letsencrypt/live/test.serve.netのフォルダーに作成されます。

※通常はcert.pem,chain.pem,privkey.pemがあれば十分。

WEBサーバの再起動を行う

以下を実施すればhttpsでアクセスが行なえます。

使ってみた感想

Let’s EncryptはPCだけではなくてスマホから使っても全く問題はなかった。短期的にはオールhttps化の回避策にはなるだろうと思うが、これはネットワーク機器用や実験用に使うべきと思います。恒久的に使ってはいけません。理由は認証が自動で所有者の正当な認証がされないSSL発行は危険だし、実際事件が起きているようなのでGoogleが恒久的には到底許すと思えない。ある程度の猶予期間や混沌とする検索エンジン世界の次のどうあるべきかが見えてきた段階で消滅するか限定的な使い方に変化するだろうと予測する。

ライセンス更新処理

放おって置くと3ヶ月でライセンスが止まるため、更新処理が定期的に必要です。更新が成功したらWEBサーバを再起動してください。

WORDPRESSのマルウェア対策

 / Security Tips, Wordpress, wordpressセキュリティ, テクニカル, トピックス, ノウハウ

WORDPRESSはCMS界の中ではユーザ数が最も多いオープンソースパッケージですが、オープンソースであるがゆえに、悪い人たち(クラッカー)に研究されてマルウェアを混入されてしまう危険性も高いのが難点。サイトを構築する段階から注意を払って作成すれば問題はないのですが、感染したあとからだと困難が待ち受けているのも事実です。


WORDPRESSの感染をチェックする方法

  • 使用しているテーマのテーマフォルダ内にあるphpやjavascriptファイルでタイムスタンプが怪しいものを見つける。

  • ファイルサイズが変わっている?あるいは増えていると思うものを開いてコードをチェックする。感染コードは見ればすぐに分かります。
  • セキュリティプラグインを導入してマルウェアの検出。50%から70%位は検出可能です。ドキュメントルート、WORDPRESSシステム配下のチェックは概ねプラグインソフトは弱いです。
  • uploadsフォルダー配下にphpファイルが存在しないかチェックする。
  • テーマ感染は既存ファイルに感染しているのがほとんど。新規ファイルのケースは少ない。
  • ドキュメントルート直下、システムフォルダ(wp-admin,wp-includes)は既存ファイルよりも新規ファイルで感染ファイルを置くケースが多い。

  • ドキュメントルート直下、システムフォルダで既存ファイルが感染している場合はワンランク上の感染と思ったほうが良い。つまりプラグイン程度で見つけたり駆除できない

セキュリティプラグインで合格だったから大丈夫と思わないほうが良いです。私は高度な感染を検知できるプラグインは未だに見たことありません。

ハイレベルなマルウェア感染

高次元の感染はタイムスタンプを過去の日付時間にする場合があり、感染がドキュメントルート全体に及ぶこともあります。つまりドキュメントルート直下、wp-admin,wp-includesあたりを改ざんする手口をやっているクラッカーはそこそこ詳しい人がやっているケースが多く簡単には見つからない手法で感染させているケースがあります。

手口と対処

  • 感染中継ファイルの拡張子を任意のイメージファイル拡張子に変えて設置
  • 感染中継ファイルで圧倒的に多いのは/wp-content/uploadsの配下に設置されている。
  • ドキュメントルート、wp-admin,wp-includes配下の感染は例えばサイトからWindowsにファイルをコピーして持ってきた上でWindows Defenderでスキャンしても見つけられる場合が結構ある。
  • ドキュメントルート、wp-admin,wp-includes配下の感染は有料ウィルススキャンソフトでWindowsにファイルをコピーして持ってきた上でスキャン実施すると高い検知率で発見、駆除ができる。
  • ドキュメントルート、wp-admin,wp-includes配下の感染はphp専用のマルウェアスキャナーで更にスキャンするとほぼ完璧に近いレベルで発見、駆除ができる。

予防策、防御策

  • ディレクトリレベルでmd5でハッシュ値を取り、コンテンツ更新する度にハッシュ値の更新を取る。
  • 毎日、定時間にバッチを走らせ前回のハッシュ値と現在のハッシュ値に相違があるか調べる。相違があった場合は感染の疑いあり。
  • 総合セキュリティプラグインの導入。最初から導入すると効果が抜群です。
  • 編集者はできるだけ固定IPで管理画面へのアクセスを縛ること。

セキュリティとWEBマーケティング「認識し難い攻撃と統計情報勘違いの恐怖」

 / SEO関連, トピックス, ノウハウ

セキュリティとWEBマーケティングは一見すると互いに結びつかない知識のように感じる人も多いだろうと思う。現実的には今のネットワーク社会では犯罪の裏にネットワーク上の攻撃や詐欺が蔓延しており、WEBマーケティングに対する脅威は日々増え根拠は十分にあると言えます。


例えば、アメリカで起きているセキュリティ攻撃には相手企業を陥れるためのネットワーク攻撃があります。相手企業のWEBサーバがダウンすれば、影響を受けて当然、2番手、3番手の企業の売上は伸びることでしょう。しかしこの手の攻撃は攻撃する側も足がつかないようにするために、リスクに備えるための準備と攻撃基地を作るのにコストがかかる。まず日本ではかなり法整備やプロバイダー、警察の連携が大分整ってきたため足がつきやすいのは間違いない。よって日本でこのような事をやろうとしたら、海外にホスティングを借りて尚且、足がつかないホスティング業者や国を選択することになるだろう。また攻撃契約者とも足がつかないようにするのだと思います。


サイレントな攻撃パターン

以上の攻撃パターンは今までの典型的な攻撃の説明ですが、一番怖いのはサイレントな気が付きにくい攻撃だったりします。気が付きにくい攻撃とはさて何でしょうか?幾つか例をあげてみたいと思います。

  1. サイトを殺さない程度に負荷をかけるDoS攻撃
  2. サイトに侵略しても改ざんもウィルスも設置ぜず、攻撃ステーションとして利用する。
  3. コンテンツの見かけの改ざんはせずに、サイト転送処理を行ってアクセスを散らす
  4. わざと404エラーを大量発生させる。
  5. わざと1ページ離脱を大量発生させる。
  6. WEBの slow loris 攻撃でゆっくりと攻撃。WEBサイトをチアノーゼに追いやり、正常アクセス減、しかもセキュリティブロックを回避する。
  7. 大量のコピーサイトを作成する。これによりオリジナルサイトが判定の勘違いで下げられてしまう場合も少なからずある。

以上のパターンが有名なところだろう。この攻撃パターンはGoogleの検索順位に確実に影響を与えます。しかもWEB担当者が攻撃されていることに気づかないため改善策を講じないからどんどん評価がゆっくり悪くなる。

検索順位に関わるSEO評価基準の例

  • サイトの表示速度は順位に影響する
  • 大量の404エラーは順位に影響する。
  • 重複サイト、重複ページは著しい低評価を与える。尚且、何が正しいか判断もつきにくい
  • 不用意なリダイレクトは評価を下げる

マーケティング統計情報の嘘と勘違い

どのWEBサイトにも、今は何かしらの計測用の埋め込みがされているのが普通では無いでしょうか?いちばん有名なところではGoogle Analyticsだと思います。この計測値は全てが本物のアクセスカウントだと思ったら大きな勘違いだと断言します。その理由は次にあげたいと思います

  • 攻撃のアクセスは必ずしもエラーにならず、HTTPレスポンスで通常の「200 OK」ステータスも取れる攻撃はかなり多い。
  • DoS攻撃は「200 OK」ステータスで攻撃が基本。シャットアウトされないように攻撃するのがセオリーだ。
  • マーケティングで良い評価になるよう攻撃し、油断&勘違いさせてサイトの向上努力をさせない。

今はスレイピング技術が各種プログラミング言語で発達しているため、高度な人間がクリック、入力したような動作をシュミレーションすることが出来ます。すなわちこれを応用して高度な攻撃が可能です。

セキュリティを向上させるとアクセス数が減る?

これも原因が2パターンあります。一つは例えばSSL化するとセキュリティの向上につながる事があります。つまり今までの攻撃が無効になることで、アクセスカウントに変換されていた攻撃がなくなるので、一見するとアクセス数が減ったように見えるというものです。私の経験上の統計ではどのサイトも平均して20%~40%の攻撃カウントがアクセス数に含まれています。つまりSSL化したタイミングでアクセス数が激減するのは正常なカウントだけになったのが調査でわかりました。攻撃カウントがゼロにはなりませんが、大幅にカウントが減るため皆導入後に躊躇します。こういう事が原因だったんですね。


2つ目は、セキュリティが強く効きすぎて正常なアクセスが遮断されるというものです。クッキーやセッション絡み、あるいはWAFの誤検知などがあげられます。これが様々な条件で生じるためテストの段階ではすり抜けてしまい結果的にエンドユーザ側で生じてしまうというケースです。

Python MySQLデータベース操作その2(更新、トランザクション) mysqlclientモジュール

 / Linux Tips, Python Bottle Framework, Security Tips, テクニカル, トピックス, ノウハウ

今回はアップデート処理を行いトランザクション処理としてロールバック機能等を入れてみる。ついでにSQLインジェクション対策のパラメータ挿入の仕方で記述します。パラメータの入れ方は多くの人がハマってしまうPython特有のぶら下がりカンマをあえて使います。入れる型に合わせて記述を考慮しなければいけませんがPython独特な書き方だと中々気づきにくいものです。他の言語では複数のリストやarrayを記述する場合は最後のパラメータの後方にはカンマを入れないのですがpythonは必要となるケースがありますのでご注意ください。


更新、トランザクション処理を入れたプログラム。SQLインジェクション対策の書き方にもなっている。

更新前と更新後を実行

Python MySQLデータベース操作その1(基本編) mysqlclientモジュール

 / Python Bottle Framework, テクニカル, トピックス, ノウハウ

pythonでMySQLの操作をする場合現在ではmysqlclientモジュールを利用するユーザ数が多いようだ。フレームワークではbottleに限らず使えます。今回はmysqlclientモジュールを使った場合の基本操作をまとめて行こうと思います。本テストではカーソルは意図的にcloseしていません。規模が多くなりメモリの再利用が必要な場合は必要かと思いますが通常の小規模では不要なケースのほうが多いと思います。


とりあえず、データベースを実験用に2つ用意します。

user_dbデータベース usersテーブル

local_areaデータベース districtテーブル

db_sampleのSQLダウンロード(ZIP形式)

下記の手順で一気にDB作成、テーブル作成、データ挿入までやります。

DB接続情報をyamlファイルで保存

viかnanoエディターでdb.yamlと開いて接続情報を次のような感じで記述保存してください。プログラムに記述しないでDB接続を書いておくとやはり便利です。とくに沢山のDBやテーブルを操作するのであればそうした方が合理的になると思います。ご自分のMySQL環境に合わせてユーザ名やパスワードを書き換えてください。

もし、yamlがインストールされていなかったら「apt-get install libyaml-dev」「yum install python-yaml」「pip3 install pyyaml」とかでインストールできると思います。

fetchoneで一つづつレコードを取り出すやり方で表示する場合

実行結果

fetchallで全てバッファに読み込んで表示する場合

実行結果

DB2つを使ってjoinでinner結合して表示する。

実行結果

他のデータベースを使用する場合

21行目の「cons = db_connect(config_db(),’DB1′)」の部分のDB1をDB2にすればDB2から情報を取り出すことが出来ます。あとは全て同じです。

TOPへ戻る