I'm going to have to agree with Martin on this.
Think about it for a second. A virus. No seriously, a computer virus. Nanites are little tiny computers when you get down to it. The best way to kill a computer remotely (since we have trouble taking out the nanites physically) is to use a virus to rewrite the nanites base code into something self-destructive. Like how the US totally didnt use a virus to destroy several Iranian centrifuges to slow their nuclear weapons program that they totally didn't have.
There are three main problems with this approach. First, you have to get a sample of the nanite base code so you can not only program a virus in the proper language, but also make it so that it does what you want it to do. This is no simple task, as the base code is either stored on a computer in a NeoNET or EVO lab that is probably swarming with nanites that escaped containment, or on the nanites themselves, which are hard to hack into. However, once you get a copy of the base code, and write a vaccine or anti-virus, you've got a good shot of disabling the nanites. For maximum effect, finding Patient Zero, along with the original programming, would be key. Just like regular viruses, computer viruses mutate over time, though usually from bugs in transmission. We already know that Sybil has split into multiple strains. And while we classify them into several broad categories, it is fairly evident that there are multiple strains within each category. You either have to write vaccines for each strain separately, or you have to go to the least common denominator, and find something that affects them all. The most effective viral measures would also be the most simple ones. There are three kinds of attacks you could try to disable the nanites without harming the patient.
*Delete: Have the virus find and delete the subroutine that allows the nanites to make more nanites. Because nanites degrade in a person's system, over the course of a few weeks, the nanites will be purged.
*Wipe: A very simple command, at the machine code level, have the nanites reformat their own drives. For those of you that don't know computers, this means they will erase everything, even their own operating systems. Without replication subroutines, the nanites will be purged.
*Add: Add junk code with a priority level that prevents the nanites from doing anything else until that code is executed, taking as much processing power as is available to do so. A great example would be to tell the nanites to calculate pi to the last digit. At worst, this will halt the nanite's progress indefinitely, allowing other methods to eliminate the nanites. At best, this will cause other functions, such as the replication routines, to go offline, in which case the nanites will be purged.
That's all well and good, except for problem two, delivery. There's no two ways about this, you have to hack into the nanites. You have to hack them a second time if you were already there the first time to get the code. Delivery is the big problem. There's really only two methods for this. Either you hack the nanites through their group 'node', which is going to be hellaciously difficult, or you send in Trojan Horse nanites to deliberately get converted and spread the disease throughout the nanite population, like that episode of Star Trek: Voyager where a kid was deliberately sent to get assimilated, because he'd been genetically modified to upload a virus to the Borg cube. However, sending in more nanites leads us to...
Problem 3, counterhacking. These nanites function as an AI, and AIs are reasonably good at protecting themselves from matrix attacks. Moreover, these AIs get stronger the more nanites are in the system. So this leaves you with only two options. Go black trenchcoat, and don't get seen until the virus is uploaded, or go pink mohawk and bring enough backup that you can beat down the AI long enough to upload the virus. Either way, getting the virus in is only half the battle. See, if you have a virus running through your device, you can try and fight it, or clean it from your system. Somehow you have to disable or distract the AI long enough to keep them from doing that.
Now, those are some fairly significant problems, but using Technomancers lessens the degree of difficulty. Remember how I said in problem 1 that having the base code from Patient Zero would be best for writing the virus? Anything that has ever been on the Matrix is in the Endless Archive, unless another technomancer or entropic sprite removes it. This means a technomancer (or team of technomancers) could dive the Archive, and find the base code. This turns what is a nigh impossible task into a fragging difficult one, but still. Counterhacking is another point where TMs are insanely useful. Part of the reason Jormungand was so destructive was because it was a partly Resonance (ok, Dissonance) creation. Non-Technomancers have trouble countering TM creations, which means a group of TMs making the virus would be able to make it much harder for the AI to counterhack, if it was possible at all.