1. If you can get to the joists from underneath you can try shimming any space between the joist and the plywood subfloor. Use wood shims, but don't pound them in too tightly, they just need to fill the gap + a little bit more. If they are driven in too tightly they could raise the floor and cause more problems.
2. If you can get to the floor from below and number 1 doesn't work, you can try screwing through the plywood subfloor into the underside of the hardwood floor. Just make sure the screws don't come up through the floor! A little weight on the floor will help with this. Also, drill a hole through the plywood ONLY, slightly larger than the diameter of the screw shaft, this will help the subfloor and the hardwood pull together rather than be screwed together the same distance apart.
3. If you CAN'T get to the floor from below, they sell some break off screws you can use to secure the floor from above. You drill a small pilot hole and then drive in the special screws until they break off. Then use the wood putty that comes with the kit to fill in the hole.
I have the same problem in my home. I've tried the first two with some success, but as winter progresses and the furnace runs, the house dries out and the floors squeak more and more. I'm going to try the break off screws next.
I think a humidifier will also help keep the wood stable. More moisture in the wood will keep it from shrinking.