Monday, June 26, 2017

My first Ethereum Mining Rig

Intro

I have always been interested in cryptocurrencies, but like many of my friends never fully had a grasp of the how the market worked and how currencies were generated. After speaking with a colleague who has left his day job to day trade on Poloniex he explained the market and economic implications of cryptocurrencies. It peaked my interest and after a few days of research decided to embarked on building my very own ethereum mining rig. Below is the result of what my research yielded and what I ended up using for the machine and all the necessary components. My first rig yielded ~42MH/s with 4 RX460's. This guide is meant for a total new comer like myself. Hope is helpful!

The Rig:


When building a machine the build list is pretty straight forward, if you have built a gaming machine in the past. ETH mining happens on the GPUs which will eventually determine your hash rate (X MH/s), which equates to how much ETHER (currency) you are generating from mining. For a more detail explanation of hash rate and what it is visit this link. Below is the part list I ended up purchasing:

These are the most basic components which really won't change the performance of your miner non-critical.
  • CPU - any slow processor would do, you will be running low overhead *nix OS, least likely Windows, just make sure it works with your motherboard.
  • Memory - as long as it has minimally 4GB of RAM memory
  • HDD/SDD - Any would work, although I highly recommend purchasing the pre-loaded SSD with ethos from gpushack
Now the critical components:
  • Motherboard - The most important aspect of purchasing a motherboard is making sure it has +4 PCI 2.0 slots, the more slots supported by the motherboard the more GPU density you can have and thus a bigger hash rate. Highly recommend reading through the most recommended boards (a bit aged still worth reviewing).
  • Power Supply - Its what will feed your rig, two things are important when selecting the power supply, make sure you have plenty of capacity and it is very efficient. The lowest capacity I would recommend is 850 WATT. My go to choice is the corsair RM1000 which comfortably supports a 6 GPU machine very low power waste, does not heat easily and extremely silent. Another worthy mention is the EVGAs which are a tad cheaper as well. 
  • GPU - The most critical component in an ethereum mining rig by far. Base on crypto compare the best GPU to use today base on the consumption/vs hash rate generated is the AMD RX480. For ETHER mining it is recommended for the GPU to have +4GB of memory. Cryptocompare.com has a great list of suggested GPUs and reviews. Due to their incredibly high demand from miners and gamers it is darn near impossible to find RX480, RX470s, or their predecessors RX570 or RX580s in the market at a reasonble price. After much research and hunting for a deal I decided to settle with RX460's (~11MH/s) for my first machine. These do not have as much power as the RX480 (~24 MH/s) but they also consume considerably less power. Most importantly they were 4 - 5 times cheaper than the RX480 sold today and easier to find. 
Besides the core components there are a list of accessories I recommend to buy, although optional they will make your rig much easier to administer and manage. 
  • Power Meter (optional) - you will need this to understand what your power consumption is, see the economics portion of the guide for details.  
  • Case - open air cases are recommended to allow a rig to breathe, most open air frame cases are $100 - $250 USD. Personally I decided to use a bamboo dish rack which has exactly the same effect and it costs $15 USD on Amazon. It does not look half bad either and is extremly portable. 
Slide show of Build

https://flic.kr/s/aHsm3pmDcB

Bundles

Gpushack.com has great bundles which include the motherboard, memory, cpu and an ssd with ethos pre-loaded. I high recommend these bundles as for one they are ultimately cheaper than buying the parts separately, but also gpushack are the guys who maintain ethos and everything will work out of the box with it. To find the bundles visit: https://gpushack.com/

ETHOS Distro

After some research the operating system I decided to use for my mining rig was http://ethosdistro.com/. ETHOS is an Ubuntu 16.04 base operating system with LXE as its desktop environment. Comes pre-built with amd and nvidia drivers, plus a ton of goodies like,  an admin panel, over clocking utilities, statistics services, support for multiple miners and much more. The key to configuring ETHOS is if your rig make sure you comment out remote.local and make all your changes in local.conf as explained here: http://ethosdistro.com/kb/#quick-start-guide. Once booted ethos will automatically start mining to a pre-configured wallet. 

a few interesting key commands are:
  • show stats - displays your GPUs and system stats like temperature, clock rate, and model. 
  • show miner - displays the current miners worked being performed, a real time checker of how many MH/s your generating
This is an example of my current local.conf config as help. Remember edit the wallet settings
Once ETHOS is up and running it will automatically generate an URL with an panel to monitor your instance from here is an example of my current rig:

Claymore Miner

Claymore is one of many miners that come pre-installed with ETHOS. Claymore not only is a very efficient miner whom boasts a 1 - 3% has rate increate over others but it can also dual mine multiple coins miner a loss of performance. The miner in ETHOS is set under the local.conf under the miner conf paramter. 

A few important things to know regarding claymore and dual mining. There is a fee for using claymore as described by the developer/s:
This miner is free-to-use, however, current developer fee is 1% for Ethereum-only mining mode (-mode 1) and 2% for dual mining mode (-mode 0), every hour the miner mines for 36 or 72 seconds for developer.
Decred/Siacoin/Lbry/Pascal is mined without developer fee.
If you don't agree with the dev fee - don't use this miner, or use "-nofee" option.
Attempts to cheat and remove dev fee will cause a bit slower mining speed (same as "-nofee 1") though miner will show same hashrate.
Miner cannot just stop if cheat is detected because creators of cheats would know that the cheat does not work and they would find new tricks. If miner does not show any errors or slowdowns, they are happy.
 Also in my testing mining 2 coins potential ETH hash rate drops from 12 MH/s per RX 460 to 10, clearly reducing your gains. The alternative coins are Sia/Pascal/Decre, whom today have smaller markets than that of ETH and in my personal opinion not worth it as it also tacks on a 2% fee from the miner. Hence I configured Claymore to only mine ether. Passing the -dpsw parameter with your email will allow you to modify the payment schedule on nanopool, which is important if you want to get paid faster.

Here is a example of my claymore.stub.conf file where all the Claymore parameters live in ETHOS. Please remember to reboot the rig once configured in order for the settings to take place, do this by typing r on the terminal.

Mining Pools

ETHOS comes pre-configured with https://nanopool.org/ as the mining pool. If you are not sure what a mining pool is you can find a way better explanation than I can write here: 


but in short, helps you get paid faster and track your progress for a fee, in nanopool's case is 1%. Once your wallet address is configured you can track the mining progress to that wallet by visiting nanopool and passing your wallet address, you can see an example of one of my miners at:



Economics of Mining

There are 3 main variables when mining any crypto currency those are:
  1. current price of coin 
  2. cost of power to mine 
  3. Hash rate
The price of the coin will be primarily dictated by the market, a great place to keep a pulse of where it is with respect to there coins is https://coinmarketcap.com

The cost of power can be calculated simply by providing the power meter (suggested above) with what your local KwH cost is. This can be found in your electrical bill or in your local power utility website. For example in Miami it is $0.123. The meter will then count how much power per KwH your machine is consuming. My 4 GPU rig clocked in at about 430 WATTs. 
Your current hash rate will determine how much ether you are actually mining. Hash rate can be affected by how power your GPU is, how difficult the hash calculation rate is at the moment. Again many of these can be found in crypto compare for each GPU. 

Wallets and Trading Services

After having built a rig a few obvious questions will come up, what wallet should I use,how do I convert ETH to USD or any other coin?

There are many wallets out there, each with their pros and cons. After spending some time reading, the most recommended ETH wallet seemed to be mist, although I had a tough time getting it running on my linux desktop, and hence decided to experiment with alternatives. First I started with Jaxx as they had a mobile client as well as a local one. Jaxx is a great wallet, and the integration with shapeshift is really nice addition, but they strongly advice against mining payouts which made me shy away from them. Ultimately I settled on Exodus, mainly due to its user interface which I fell in love with, plus there are some added security benefits. A good comparison can be found at:

https://www.reddit.com/r/Bitcoin/comments/60a9si/jaxx_vs_exodus_which_is_a_better_wallet/

Both Jaxx and Exodus allow you to exchange between coins but they are not exchange markets themselves. If you are getting comfortable with mining and have an appetite/interest on day trading I high recommend Poloniex or Bittrex. Poloniex also advice's users not o use them as a mining payout wallet.

Finally if you want to convert ETH or BTC to USD coinbase.com is the best place to do so. Another wallet provider that advice against using them as a mining pool payout. The main reasons are:

https://community.coinbase.com/t/why-warning-about-sending-mining-rewards-directly-to-wallet-address/15522/7

Final Words

My first rig has been running for about 4 weeks now and successfully making payments. This is a great (and potentially) profitable project to embark upon for any enthusiast out there. I am now on the path of building my second rig with 6 GPUs with new lessons learned (potential part 2 coming). Please drop me a line if this write up helped you (@divious_1) or you have any questions. Also credits to blockoperations.com who's blog gave me direction throughout the build process.



Monday, May 8, 2017

Fighting Bot Attacks presentation at FIRST

Took some time to speak to FIRST attendee regarding some of the lessons learned at Zenedge fighting bot attacks. In the presentation, I covered an attacker whom persistently kept coming back to a customer and bypassing our mitigation techniques and how we evolved to protect ourselves. Finished the talk by describing how you can build your own protection. See the slows below

https://app.slidebean.com/p/NFgtVrcBmD/Fighting-Bots

Tuesday, June 7, 2016

FrakenTank is Alive!

FrakenTank

My friend Berto just finished his FrankenTank and its looking awesome. Really interesting for a weekend project,  and a mobile platform for other things to be built on it. See a demo video at:


Monday, July 13, 2015

Heka debian init script



After much hunting around I couldn't find one that logged and worked with the .deb binary in their github. Here is the one I built, hope it helps https://github.com/divious1/heka/blob/master/debian-init




Friday, February 13, 2015

Deploying Hardened Splunk with Ansible



Just finished 2 blog post on the Splunk blog which covers how to get started with Ansible and deploy harden Splunk instances. Also dive I into how to deploy and manage multiple custom Splunk environment in AWS using Ansible.

To get started on how to use Splunk with Ansible (Part 1).
Also there is a github repo with the playbooks that are broken down into roles:

  • Common - copies keys over, install basic utils (screen,vim etc.), hardens server (by installing rkhunter,chkrootkit,clamav and cronjobs to run them)
  • Search Head - install a splunk search head, changes default password, hardens splunk web, among other things, runs as splunk user
  • Indexer - install a splunk indexer, copies over indexes, and certs/key of secure comms
  • Universal Forwarder - install a UF, deploy inputs.conf and outputs.conf

How to scale it on AWS with multiple Splunk instances, ultimately manage it as a service (Part 2). In part two the way we inventory Ansible changes from a static host file to a dynamic inventory fed out of AWS instances. Due to this it has its own github repo.



Tuesday, December 30, 2014

Search the web from Splunk using Faroo


I have been away for a while, but been very busy at Github. Just wrapped up a app for Splunk that allows you to search the web using key words from a specific Splunk field. Primary use for this is to rank up items that might have been indexed by a web service like Faroo. Also to add further context on the fly when doing investigations.

See the code at:

https://github.com/divious1/SA-faroo

I just submitted to https://apps.splunk.com for approval.

Tuesday, June 3, 2014

Generating Elliptical Curve (EC) Key/Pair

Just finished a post over at Splunk blog regarding using EC (Elliptical Curve) certs with in Splunk. Although the explanation was geared towards someone deploy the keys in a Splunk deployment the key pair could be used in any situation (proxy, web server etc..)

Here is the TL;DR summary of the post:


Generate a New Elliptical Curve CA key and Cert
openssl ecparam -out ca-key.pem -genkey -name prime256v1
openssl req -x509 -new -key ca-key.pem -out ca-cert.pem

Generate Servers Private key and CSR
openssl ecparam -out server-key.pem -genkey -name prime256v1
openssl req -new -key server-key.pem -out server-csr.pem


Generate Public Certificates:
openssl x509 -req -days 365 -in server-csr.pem -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem

Testing

If you want to test your keys. Start a web server with the following openssl command.
openssl s_server -www -key server-key.pem -cert server-cert.pem -CAfile ca-cert.pem -state

Then, try to connect to
openssl s_client -connect 127.0.0.1:4433

Friday, May 9, 2014

Nexpose Python Client Library

Just wrapped up a client library for Nexpose. I forked one already created, but added custom reporting support to it, which was a feature that a friend was requesting. Hope it helps anyone else running this as their Vulnerability scanner.

https://github.com/divious1/pnexpose

If there are any errors, or issues with it please feel free to ping me at @divious_1

Thursday, November 28, 2013

SensorSub.com, IndicatorIntel.com, Public CIF Updates

Its been a while since I provided an update on the ongoing  projects or anything new. First off want to extend a huge public thank you to Rebekah Monson (@rsm) for making sensorsub.com and taking it to a new levels with the Awesome Foundation grant. She has a great recollection of the Subs evolution on the site with upcoming events. Hopefully we should be water testing it ASAP and I should be putting up an updated bill of materials and design plan. Alot of items have changed through the Subs evolution and I'm sure alot more will change as we start water testing it.

IndicatorIntel.com is half cooked so far, I have a working application which collects OSINT data and stores it on a no SQL data store. The next step is making collectors for honeypots like Dionea or Amun and start making a search UI.

As to the public CIF instance I have to apologies for not being on top of new user request. Some have been backed up and I have not updated the service to CIF 1.0v yet. As time progressing I will be phasing out this service to replace it with IndicatorIntel.com as I get closer to a release candidate.

Sunday, September 15, 2013

Get Crazyflie Quad Copter working on the Raspberry Pi with a Sony PS3 Bluetooth controller

Recently got my hands on a crazyfly and I must say I love it. Took me few minutes to get it assembled using bitcraze instructions: http://wiki.bitcraze.se/projects:crazyflie:mechanics:assembly
I wanted to get it running with my raspberry pi to use it on the go but ran into a few hiccups so I decided to put this doc together as  guide for anyone whom has a PS3 Bluetooth controller at home (crazyfly has only documentation on xbox wired).



Things you need:

  1. Crazyflie
  2. Sony PS3 Controller
  3. USB Bluetooth adapter
  4. Crazyradio
  5. Raspberry Pi (with all necessary accessories)



  1. Start to assemble the crazyflie using the instructions at bitcrazy.
  2. Download and image an SD card with bitcraze pre-built raspberry pi crazy fly image: http://wiki.bitcraze.se/projects:crazyflie:binaries:raspberrypi
  3. Boot up the Pi with the fresh baked image, update you pi and install any necessary tools you use (I usually install vim, lshw, screen, etc..)
  4. Install PS3 controller and other necessary libraries:
    sudo apt-get upgrade
    sudo apt-get install bluez-utils bluez-compat bluez-hcidump libusb-dev libbluetooth-dev joystick usbutil pyqt4-dev-tools
  5. Check that the Bluetooth module is being detected: 
    pi@raspberrypi ~ $ hciconfig hci0: Type: BR/EDR Bus: USB
    BD Address: 00:1F:81:00:06:20 ACL MTU: 1021:4 SCO MTU: 180:1
    UP RUNNING PSCAN
    RX bytes:1260 acl:0 sco:0 events:46 errors:0
    TX bytes:452 acl:0 sco:0 commands:45 errors:0
    If you see your USB Bluetooth adapter then you are good if not there is an issue with the Pi Recognizing your adapter
  6. Install the paring software to pair the controller with the Pi:
    wget http://www.pabr.org/sixlinux/sixpair.c
    gcc -o sixpair sixpair.c -lusb

  7. After you compile this file there will be a binary executable called “sixpair” which now you can execute, connect your PS3 controller using a USB cable to the Pi (You only have to do this once for the pairing)
    Run the executable and you should see something like this:
    crazyfly-pi ~ $ sudo ./sixpair
    Current Bluetooth master: f0:f0:02:c7:f5:8e
    Setting master bd_addr to 00:10:60:d2:c2:fe

  8. If you get that output that means your controller is now officially paired with the Pi. Now we have to install the controlling application that read the controller as an input device. 
    wget http://sourceforge.net/projects/qtsixa/files/QtSixA%201.5.1/QtSixA-1.5.1-src.tar.gz
    tar xfvz QtSixA-1.5.1-src.tar.gz
    cd QtSixA-1.5.1/sixad
    make
    sudo mkdir -p /var/lib/sixad/profiles
    sudo make install 
  9. Now we can test to see if the controller is working first start the sixad daemon and initiate the controller:
    sudo sixad --start
    When Prompted Press the PS button and the 4 upper LED on controller will light up.
  10. To test that you are indeed receiving input from the controller run jstester against the input:
    sudo /usr/bin/jstest /dev/input/js0
    You should be seeing the following values change and you press keys in the controller.

  11. We must tell now cfheadless that we are going to be using a PS3 Bluetooth controller edit the following file and Change PS3_Mode1 to PS3_Mod2 like so: crazyfly-pi:~# cat /home/bitcraze/controller.conf
    PS3_Mode_2
  12. Now we need to make that assures that cfheadless is always running, this assures that even if the crazyflie is not detected right away it will get configured the right way. Place the following script in /root/run_crazyfly.sh

  13. Now we make this run every minute
    sudo -i
    crontab -e

    and add the following lines to it:
    */1 * * * * /root/run_crazyfly.sh
    @reboot sixad -s

  14. You should be set now, restart your pi, make sure you turn on your crazyflie. Once the pi has booted give it 5 minutes and press the PS button on your ps3 controller. You should be able to controller your crazyflie with the controller.