  Cryptojacking is the permissionless use of a target device to covertly mine
cryptocurrencies. With cryptojacking, attackers use malicious JavaScript codes
to force web browsers into solving proof-of-work puzzles, thus making money by
exploiting the resources of the website visitors. To understand and counter
such attacks, we systematically analyze the static, dynamic, and economic
aspects of in-browser cryptojacking. For static analysis, we perform content,
currency, and code-based categorization of cryptojacking samples to 1) measure
their distribution across websites, 2) highlight their platform affinities, and
3) study their code complexities. We apply machine learning techniques to
distinguish cryptojacking scripts from benign and malicious JavaScript samples
with 100\% accuracy. For dynamic analysis, we analyze the effect of
cryptojacking on critical system resources, such as CPU and battery usage. We
also perform web browser fingerprinting to analyze the information exchange
between the victim node and the dropzone cryptojacking server. We also build an
analytical model to empirically evaluate the feasibility of cryptojacking as an
alternative to online advertisement. Our results show a sizeable negative
profit and loss gap, indicating that the model is economically infeasible.
Finally, leveraging insights from our analyses, we build countermeasures for
in-browser cryptojacking that improve the existing remedies.
