coincheck APIとslack APIを使ってBTCに暴落・暴騰をslackでお知らせBotを作ったった
チャート見てない時のBTC変動が知りたい!!!
最近、BTCに手を出し始めて色々とウハウハしてるのだが、運転している間や授業を受けている間もBTC価格の変 動が知りたい! と言うことでcoincheckさんが提供しているAPIとslack APIを利用して、BTCが高騰or暴落したらslackにメッセージを投げてくれるようなプログラムを作ってみた!
今回の概要
3分毎にBTCレートを取得して3分前より3000BTC以上の変動があった場合はslackに通知メッセージを投げる
各API
まぁ、本当は自動取引するスクリプト書けや、って話なんだけどそれはそれで怖いのであくまでも知らせるだけ !今回は上記URLのcoincheckのpublic APIのティッカーを使用しました!
使用した環境
- CentOS 7
- cron
- python3.6
手順
slack Web APIを使用するためtokenを取得
Slack APIを使用してメッセージを送信する Slack APIのTokenの取得・ 場所
上記の2つの記事に大変お世話になった!APIビギナーの私を助けてくれてありがとう!
上記の記事に従ってAPI tokenを取得したらコピペで保存しておくこと!
curl -XPOST -d token=取得したtoken -d channel=#random -d text=THIS_IS_TEST -d username=host https://slack.com/api/chat.postMessage
これでslackに通知ができていたら成功
coincheck APIのticker
curl GET https://coincheck.com/api/ticker
このリクエストを実行すると現在のBTCの価値などの情報がjson形式で帰ってくる
{"last":570723.0,"bid":570723.0,"ask":570817.0,"high":579499.0,"low":533102.0,"volume":43952.21153332,"timestamp":1507803511}
こいつをスクリプトの中で実行して、トリミング後にパラメータとして実行する
slackAPIへと投げてくれるスクリプトのソース
githubに全てのソースと設定ファイルを置いているので、環境さえ整っていれば動く、はず!
import subprocess
import sys
#変動幅
PRICE = 3000
FLAG = 0
#それぞれの文字列をfloat化してdiffを計算するメソッド
def calcurate(now_rate,later_rate):
now = float(now_rate)
later = float(later_rate)
result = now - later
print(result)
return result
#diffによる条件分岐メソッド
def select(result):
if result < 0 and result < -PRICE :
print("大幅下落時の処理")
#FLAG = 0
return 0
elif result > 0 and result > PRICE :
print("大幅高騰時の処理")
#FLAG = 1
return 1
elif result == 0:
print("変化なし")
else:
print("大幅な変化なし")
#slackにpost_apiを叩くメソッド
def send_slack(FLAG,now_rate,result):
if FLAG == 1:
cmd = "curl -XPOST -d token=取得したtoken -d channel=#btc_channel -d text=高騰中:Now_changing_rate_:__now_rate:" + str(now_rate) + "__:value_change:" + str(result) + " -d username=btc_alert https://slack.com/api/chat.postMessage"
subprocess.call( cmd.split(" ") )
elif FLAG == 0:
cmd = "curl -XPOST -d token=取得したtoken -d channel=#btc_channel -d text=暴落中:Now_changing_rate_:__now_rate:" + str(now_rate) + "__:value_change:" + str(result) + " -d username=btc_alert https://slack.com/api/chat.postMessage"
subprocess.call( cmd.split(" ") )
else:
print("Nothing alert")
#curlでcoincheckからパラメータ取得
cmd = "curl GET https://coincheck.com/api/ticker"
now_price = subprocess.check_output( cmd.split(" ") )
#前回スクリプト実行時のパラメータを取得
#開くファイルのパスを指定
for later_rate in open('/home/shambara/api/file.txt', 'r'):
print(later_rate)
#現在のパラメータのトリミング
print(now_price)
now_price = str(now_price)
now_price = now_price.split(",")
numresult = now_price[0].split(":")
now_rate = numresult[1]
#diff計算
result = calcurate(now_rate,later_rate)
print("result is " +str(result))
#diffにより処理分岐
FLAG = select(result)
print("FLAG is " + str(FLAG))
#slackにapiを叩く
send_slack(FLAG,now_rate,result)
#現在のパラメータを外部ファイルに保存
#書き込むファイルのパスを指定
now_rate = str(now_rate)
file = open('/home/shambara/api/file.txt','w')
file.write(now_rate)
file.close()
hydraでSSHパスワードクラック
なんとなく、夏休みで微妙にヒマ。と言うことでHydraを使って自前のVM上でSSH認証にブルートフォースアタックしてみた。許可された環境で攻撃をしていますが、今から紹介する方法を許可されていない環境や所有者が自身ではないマシンに攻撃した場合は立派な犯罪行為になるので実行するなら許可された範囲内で実行してください。
そもそもhydraって何?
画像はKali Linux
hydraは簡単に言うと、認証機構にブルートフォースアタック(辞書引き攻撃)を仕掛けるツール
少しの知識があれば初心者でも容易にブルートフォースアタックができてしまう恐ろしいツール、当初はKali Linuxにデフォルトで入っているhydraを使おうとしてた。
だけどKali Linuxが重い、遅い。そこでもう今回だけはMacBookのローカル上からVMに攻撃してみた。
実行環境
攻撃マシン
Hydra v8.6
やられマシン
CentOS Linux release 7.3.1611 (Core)
手順
- hydraのインストール
- VM側の所設定
- 攻撃
- ログの確認
hydraのインストール
$ sudo brew install hydra
インストール完了!と思いきや、いざ実行すると...
[ERROR] Compiled without LIBSSH v0.4.x support, module is not available!
なんかモジュール足りてない.. そこで一度インストールしたhydraをアンインストール、再度インストールする
$ brew uninstall hydra
$ brew install -v --with-libssh hydra
動いたああ
VMの所設定
まずSSH認証破られる側のユーザを作成した
USER : crack PASSWORD : Alexis
今回はデフォルトの辞書を使用するため、その中からランダムに選んだAlexisをパスワードに設定 多分、関係はないと思うが一応VMのFirewallも解除しておいた。
$ sudo systemctl stop firewalld
攻撃
ついに攻撃フェーズ、もう一度言っとくが自分の作ったマシンや許可されたマシンだけに攻撃しないと立派な犯罪行為なので気をつけること。
hydraの使い方
hydra -l ユーザ -p '辞書のパス' 攻撃するマシンのIP プロトコル
今回はcrackというユーザのssh認証のパスワードを盗み取るため
$ hydea -l crack -p '/usr/share/dict/words' 10.10.10.10(仮IP) ssh
で実行
SSH認証は割と堅い方の認証だからか...25分くらい時間かかった。 そして結果!
Hydra (http://www.thc.org/thc-hydra) starting at 2017-08-17 15:51:28
[WARNING] Many SSH configurations limit the number of parallel tasks, it is recommended to reduce the tasks: use -t 4
[DATA] max 16 tasks per 1 server, overall 16 tasks, 235886 login tries (l:1/p:235886), ~14743 tries per task
[DATA] attacking ssh://10.10.10.10:22/
[STATUS] 258.00 tries/min, 258 tries in 00:01h, 235630 to do in 15:14h, 16 active
[STATUS] 246.00 tries/min, 738 tries in 00:03h, 235150 to do in 15:56h, 16 active
[STATUS] 239.71 tries/min, 1678 tries in 00:07h, 234210 to do in 16:18h, 16 active
[STATUS] 235.93 tries/min, 3539 tries in 00:15h, 232349 to do in 16:25h, 16 active
[22][ssh] host: 10.10.10.10 login: crack password: Alexis
1 of 1 target successfully completed, 1 valid password found
[WARNING] Writing restore file because 3 final worker threads did not complete until end.
[ERROR] 3 targets did not resolve or could not be connected
[ERROR] 16 targets did not complete
Hydra (http://www.thc.org/thc-hydra) finished at 2017-08-17 16:13:11
[22][ssh] host: 10.10.10.10 login: crack password: Alexis
ばっちり取れてんじゃん...最高かよ
ログの確認
このブルートフォースアタックをしている際のエラーログは/var/log/secureに吐き出されていて、エグい数のログが残されているので確認してみると実際に辞書引き攻撃をされている様子がわかる。ほんとエグい数なので今回は割愛。
総括
いくらssh認証でもユーザがわかっている状態でパスワードが強度皆無だと
所要時間: about 23分 ユーザ名: crack パスワード: Alexis
で破られる事が体感できた。今回はhydraをインストールした際に付いてきたデフォルトの辞書を用いて攻撃したが世の中にはもっと人々が使うであろう単語を辞書化した辞書がたくさんあるだろうから、ある程度の強度のパスワードは簡単に破れるんだろうなーっと感じた。本当に強いパスワードって大事だ...
次回は攻撃者の視点からみた攻撃の手順なんかを書いてみようかなと思う。
大変参考になったページ
VM上でRails構築してみた
Ruby on Rails をローカルに構築するのはちょっとかっこわるいのでVM上に構築してみた!
そこで備忘録だぁぁぁ!!
今回の開発環境
- CentOS 7
構築した環境
-
rbenv
$ rbenv --version rbenv 1.1.1-2-g615f844
-
Ruby
$ ruby -v ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-linux] 動作確認できたのは2.3.0 4.1.0も一応インストール
-
gem
$ gem -v 2.5.1 yumでインストール
-
bundler
$ bundle -v Bundler version 1.15.3
-
Rails
$ rails -v Expected string default value for '--rc'; got false (boolean) Rails 4.2.2
Railsインストールの前準備
rbenv
$ sudo yum -y install gcc gcc-c++ make bzip2 libyaml-devel libffi-devel zlib-devel openssl-devel readline-devel gdbm-devel ncurses-devel
$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
.bash_profileに追加
$ sudo vi ~/.bash_profile
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"
$ source ~/.bash_profile
ruby
$ rbenv install 2.3.0
$ rbenv global 2.3.0
gem
$ sudo yum install gem
各ツール
$ sudo yum -y install libxml2 libxslt libxml2-devel libxslt-devel
$ sudo gem install nokogiri -- --use-system-libraries
∗ なんか2回目の構築の際に上記のinstallでnokogiriが上手くインストールされなかった
下記のinstallでnokogiriをinstall
∗ $ gem install nokogiri -v '1.6.6.4'
$ sudo yum -y install sqlite sqlite-devel
$ sudo gem install sqlite3
bundler
$ sudo gem install bundler
Rails
$ sudo gem install rails --version 4.2.2
インストールしたRuby on Railsを動かそう
$ cd
$ mkdir workspace
$ cd workspace
$ cd ~/workspace
$ rails new hello_app
rails new プロジェクト名で指定したプロジェクトファイルの中に大量のファイルとディレクトリが作成される。この大量にあるファイルの中から編集する所を選択して編集するだけでRailsアプリケーションが簡単にできる!これぞ、フレームワークの醍醐味!
vim ~/hello_app/Gemfile
source 'https://rubygems.org'
git_source(:github) do |repo_name|
repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/")
"https://github.com/#{repo_name}.git"
end
# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '~> 5.1.2'
# Use sqlite3 as the database for Active Record
gem 'sqlite3'
# Use Puma as the app server
gem 'puma', '~> 3.0'
# Use SCSS for stylesheets
gem 'sass-rails', '~> 5.0'
# Use Uglifier as compressor for JavaScript assets
gem 'uglifier', '>= 1.3.0'
# Use CoffeeScript for .coffee assets and views
gem 'coffee-rails', '~> 4.2'
# See https://github.com/rails/execjs#readme
# for more supported runtimes
gem 'therubyracer', platforms: :ruby
# Use jquery as the JavaScript library
gem 'jquery-rails'
# Turbolinks makes navigating your web application faster.
# Read more: https://github.com/turbolinks/turbolinks
gem 'turbolinks', '~> 5.x'
# Build JSON APIs with ease.
# Read more: https://github.com/rails/jbuilder
gem 'jbuilder', '~> 2.0'
# Use Redis adapter to run Action Cable in production
# gem 'redis', '~> 3.0'
# Use ActiveModel has_secure_password
# gem 'bcrypt', '~> 3.1.7'
# Use Capistrano for deployment
# gem 'capistrano-rails', group: :development
group :development, :test do
# Call 'byebug' anywhere in the code to stop execution
# and get a debugger console
gem 'byebug', platform: :mri
end
group :development do
# Access an IRB console on exception pages or by using
# <%= console %> anywhere in the code.
gem 'web-console'
gem 'listen', '~> 3.0.5'
# Spring speeds up development by keeping your application running
# in the background. Read more: https://github.com/rails/spring
gem 'spring'
gem 'spring-watcher-listen', '~> 2.0.0'
end
Defaultでは gem 'therubyracer', platforms: :ruby がコメントアウトになっているので コメントアウトを解除する
Gemをインストール
$ bundle install
Gemfileやディレクトリを変更するたびにbundle installしないといけない
Webサーバを起動
$ rails server -b VMのIP -p 3000
Webブラウザで3000番portにhttp接続
http://VM IP :3000
Ex) $ rails server -b 255.255.255.255 -p 3000
http://255.255.255.255:3000
だがしかし
サーバーに接続できません(^q^)
何故だ,何故だ,何故だ,もはやポルナレフ状態
あ、そうか...
FireWallの設定だ
Firewallの設定
$ firewall-cmd --zone=public --add-port=3000/tcp --permanent
#3000番ポートの開放
$ firewall-cmd --reload
#リロード
FireWalldをsystemctlで起動した状態で
確認
$ firewall-cmd --list-all
public
target: default
icmp-block-inversion: no
interfaces:
sources:
services: **************
ports: 3000/tcp
protocols:
masquerade: no
forward-ports:
sourceports:
icmp-blocks:
rich rules:
3000番portの開放確認
この状態だとlsofコマンドとpsコマンドでプロセスを確認できる
Webブラウザで確認
WebブラウザでRailsが確認できた!これで環境構築は一通り完了だ!