内角540°

セキュリティ。SIEMとかIPSとか統計とかクラウドとか。数学以外で。

クラウドアプリケーションを守るSIEM相関ルール

SIEM相関ルール作成の知見に読んでみる。

参考:
www.skyformation.com

続きを読む

セキュリティレポートのリンク集

最近読んだセキュリティレポート

セキュリティレポート

レポート名 頻度 リンク
McAfee
脅威レポート
四半期 McAfee セキュリティ研究レポート
IIJ
Internet Infrastructure Review
四半期 セキュリティ・技術レポート IIJ
Symantec
脅威レポート
年次 セキュリティ脅威レポート
※要登録
Cisco
セキュリティレポート
半期 Ciscoセキュリティレポート
※要登録
NTT-Com
セキュリティレポート
不定期 NTT Communicationsセキュリティレポート
※一部登録必須
FFRI
Monthly Research
月次 http://www.ffri.jp/research/monthly_research.htm
FFRI
リサーチペーパー
不定期 http://www.ffri.jp/research/research_papers.htm
Trend Micro
セキュリティレポート
Trend Microセキュリティ情報
LAC
JSOC INSIGHT
四半期 https://www.lac.co.jp/lacwatch/report/
IBM
Tokyo SOC Report
不定期 https://www.ibm.com/blogs/tokyo-soc/
NRIセキュア
調査レポート
不定期 自社調査レポート
※要登録

セキュリティブログ

レポート名 リンク
Fortinet
セキュリティブログ
セキュリティブログ - フォーティネット
F-Secure
エフセキュアブログ
エフセキュアブログ
TrendMicro
セキュリティブログ
トレンドマイクロ セキュリティブログ
KASPERSKY
カスペルスキー公式ブログ
カスペルスキー公式ブログ
IIJ
IIJ-SECT Security Diary
IIJ-SECT Security Diary

野球選手データの取得@python+splunk

目標

選手の成績推移が見たい。

流れ

  1. PythonでSportsnaviの情報をCSVにする。
  2. Splunkで読み取り、成績推移グラフを作る

選手情報のCSV

コード

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import urllib
import re
import datetime
time = str(datetime.datetime.today())
day = str(datetime.date.today())

######URLアクセス######
def httpGetter(url):
	#送信先URL
	#url += "?{0}".format( urllib.urlencode( param ) )
	#API実行
	result = None
	try :
		result = urllib.urlopen( url ).read()
	except ValueError :
		print "アクセス失敗"
	return result

######CSV出力######
def fileExport(data,filename):
	f = open(filename, 'w')
	for i in data:
		f.write(i+"\n")
	f.close()

######文字整形######
def html_cleaner(data):
	r = re.compile("<tr.*?</tr>")
	data = r.findall(data.replace("\n", ""))

	player = []
	for i in data:
		i = re.sub(r'<.*?>', "", i.replace("</td>",","))
		player.append(i.decode('utf-8'))
	return player

def player_parser(case,player_data):
	if case == "batter":player = ["date,team,PlayerNo,name,daritu,shiaisuu,dasekisuu,dasuu,anda,niruida,sanruida,homerun,ruidasuu,daten,tokuten,sanshin,fourball,deadball,gida,giseifurai,tourui,syuturuiritu,tyoudaritu,tokutenken,syouriten,heisatu,sissaku"]
	if case == "pitcher":player = ["date,team,PlayerNo,name,bougyoritu,shiaisuu,kantou,mushittenshouri,mushikyuu,win,lose,hold,holdpoint,save,shouritu,toukyuukaisuu,hianda,hihonruida,datusanshin,fourball,deadball,boutou,bo-ku,shiten,jisekiten"]
	for i in player_data:
		i = re.sub(r",(\.)(\d+)",r",0.\2",i)
		i = re.sub(r"-",r"0",i)
		i = re.sub(r"&nbsp;1/3",r".333",i)
		i = re.sub(r"&nbsp;2/3",r".666",i)
		if (re.match(r".+?,.+?,.*?,.*?,.*?,.*?,.*?,.*?,.*?,.*?,.*?,.*?,.*?,.*?,.*?,.*" , i)):
			player.append(time+","+str(team_no)+","+i.encode('utf-8'))
	return player

teams = ["001_読売ジャイアンツ","002_東京ヤクルトスワローズ","003_横浜DeNAベイスターズ","004_中日ドラゴンズ","005_阪神タイガース","006_広島東洋カープ",\
         "007_埼玉西武ライオンズ","008_北海道日本ハムファイターズ","009_千葉ロッテマリーンズ","376_東北楽天ゴールデンイーグルス","011_オリックス・バファローズ","012_福岡ソフトバンクホークス"]
for team_no in teams:
	batter_data  = html_cleaner ( httpGetter (url = "https://baseball.yahoo.co.jp/npb/teams/"+str(int(team_no[0:3]))+"/memberlist?type=b"))
	pitcher_data = html_cleaner ( httpGetter (url = "https://baseball.yahoo.co.jp/npb/teams/"+str(int(team_no[0:3]))+"/memberlist?type=p"))

	#野手データ取得
	exp = player_parser("batter",batter_data)
	fileExport(exp,"data_batter/"+str(team_no[0:3])+"_"+day+"_batter.csv")
	for i in exp:print i
	#投手データ取得
	exp = player_parser("pitcher",pitcher_data)
	fileExport(exp,"data_pitcher/"+str(team_no[0:3])+"_"+day+"_pitcher.csv")
	for i in exp:print i

アウトプット

2017-03-21 17:14:19.120000,003:横浜DeNAベイスターズ,25,筒香 嘉智,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
2017-03-21 17:14:19.120000,012:福岡ソフトバンクホークス,18,松坂 大輔,4.76,3,0,0,0,0,0,0,0,0,0,11.333,4,1,7,10,2,2,0,8,6,

f:id:gokaxtukei:20170321172206p:plain
f:id:gokaxtukei:20170321172341p:plain

Splunkでデータ読み取り

特に指定なし。
ソースタイプ→CSVで指定すれば、インデックス行を読み取ってくれる。
結果ディレクトリを入力する。

index="pitcher" OR index="batter"
|search player_num = 9
|search team = "003*"
|timechart max(daritu)

f:id:gokaxtukei:20170321223339p:plain

複数日のデータが集まるまで、我慢…!
f:id:gokaxtukei:20170321181201p:plain

0CTF(2017) writeup #oneTimePad

問題

I swear that the safest cryptosystem is used to encrypt the secret!
oneTimePad.zip

2ファイルを渡される。

①暗号化用のスクリプト
oneTimePad.py
②フラグを暗号化した結果ファイル
ciphertext

解く

GF(2^{256})で定義された暗号。
processから以下を読み取れる。

  • R:乱数
  • K:鍵
  • S:シード

 K_{0}=(R_{0})
 K_{1}={{(K_{0}} \bigoplus S)}^2
 K_{2}={{(K_{1}} \bigoplus S)}^2


上記から、Sとkeyを導く。

 S^2=K_{1} \bigoplus K_{2}
 K_{0}=K_{1} \bigoplus {K_{1}}^2 \bigoplus K_{2}

 K_{1}と、 K_{2}はわかっている。

 K_{1} =crypted(fake_secret1) \bigoplus fake_secret1
 K_{2} =crypted(fake_secret2) \bigoplus fake_secret2

コード

#!/usr/bin/env python
# coding=utf-8

from os import urandom

def process(m, k):
    cal = m ^ k
    res = 0
    for i in bin(cal)[2:]:
        res = res << 1;
        if (int(i)):
            res = res ^ cal

        if (res >> 256):
            res = res ^ P
    return res

def keygen(seed):
    key = str2num(urandom(32))
    while True:
        #print "key : ",key,"\nseed : ",seed
        yield key
        key = process(key, seed)

def str2num(s):
    return int(s.encode('hex'), 16)

P = 0x10000000000000000000000000000000000000000000000000000000000000425L
fake_secret1 = "I_am_not_a_secret_so_you_know_me"
fake_secret2 = "feeddeadbeefcafefeeddeadbeefcafe"

#----------------------------------------------------------------#
ctxt1 = 0xaf3fcc28377e7e983355096fd4f635856df82bbab61d2c50892d9ee5d913a07f
ctxt2 = 0x630eb4dce274d29a16f86940f2f35253477665949170ed9e8c9e828794b5543c
ctxt3 = 0xe913db07cbe4f433c7cdeaac549757d23651ebdccf69d7fbdfd5dc2829334d1b

key2 = ctxt2 ^ str2num(fake_secret1)
key3 = ctxt3 ^ str2num(fake_secret2)
 
cal = key3
for i in range(255):cal = process(cal, 0)

seed = cal ^ key2
process(key2, seed) == key3
cal = key2
for i in range(255):cal = process(cal, 0)
key1 = cal ^ seed
process(key1, seed) == key2

message = key1 ^ ctxt1
print "flag{"+hex(message)[2:-1].decode("hex")+"}"

フラグ

flag{t0_B3_r4ndoM_en0Ugh_1s_nec3s5arY}

Evernoteの代替に、AWSでRedmineをたてる

大きな流れ

  • AWS借りる ★今回はここ
  • Redmineたてる ★今回はここ
  • ドメイン借りる
  • SSL対応
  • Snortいれる
  • ModSecurityいれる
  • リモートSplunk監視

-------------------------------------------------

AWS借りる

非常に詳しいリンクがあったので、参考にする。
https://portal.aws.amazon.com/gp/aws/developer/registration/index.html

※リンク先と違う部分のみ下記に記載※

インスタンスは「Redmine ※HVMバージョン」を選択

それとそれと、AWSは稼働時間課金なので、インスタンスは2個3個作っても大丈夫だと思われる
20GBの制限があるけど

SSHで接続するので、キーペアは作成すること!

f:id:gokaxtukei:20170319044541p:plain


-------------------------------------------------

Redmine初回ログイン

HVMバージョンの場合、[admin][AWS上のインスタンス名]

AWS Marketplace ご利用方法
最新版:3.0.3
Once the instance is running, paste the publicDNS or publicIP into your browser window to access the software. Default username for redmine is 'admin' and the password is the instance-id (e.g. i-f4c446fd). You can add/remove/change user and password once you logged in. For additional information, please refer to the user's guide at https://s3.amazonaws.com/aws-market.iaansys.com/AMI-IAANSYS-Redmine-Adv-Ubuntu-64/README_redmine.v3.0.3_ubt.txt

[個人設定]→[パスワード変更]からデフォルトから変更しておく。

-------------------------------------------------

OS以上の初期設定

  • ubuntuユーザの削除
  • sshdのLISTENポート変更※EC2セキュリティグループで、変更後のTCPポートを許可する必要あり

qiita.com



SSHでは、「非デフォルトポート」+「証明書」+「パスワード」を指定する必要ありになった。
証明書以外、あれですが。。。

  • HTTPのLISTENポート変更※EC2セキュリティグループで、変更後のTCPポートを許可する必要あり

vi /etc/nginx/conf.d/redmine.conf

ポートを任意のものに変える

-------------------------------------------------

20GBで足りるのかな?
f:id:gokaxtukei:20170319054429p:plain

Snortインストール方法(Windows)

フリーの不正侵入検知といえば、Snort
プラットフォームはLinuxだけでなく、WindowsMacなどでも利用できる。
今回はWindowsに導入し、操作感を確かめる。

f:id:gokaxtukei:20170321215100p:plain:w300

続きを読む